Size: a a a

Kotlin Community

2020 March 05

AF

Alex F. in Kotlin Community
Alexander Nozik
Тогда сортировка в принципе не возможна полностью. Вот отсортировали вы все по возрастанию, а приходит следующий элемент, который больше всех предыдущих. Надо тогда какими-то пачками делать, логику менять
Да, если не вдаваться в подробности, каждый новый элемент вызовет пересортировку.
источник

AF

Alex F. in Kotlin Community
Для, этого я и добавил оператор sample, чтобы реже её проводить.
источник

AN

Alexander Nozik in Kotlin Community
Alex F.
Да, если не вдаваться в подробности, каждый новый элемент вызовет пересортировку.
Ну так и держите их в коллекции. Выходной flow тут совсем не нужен.
источник

AN

Alexander Nozik in Kotlin Community
Alex F.
Для, этого я и добавил оператор sample, чтобы реже её проводить.
если вы на JVM, то возьмите SortedSet, он все сам сделает.
источник

AN

Alexander Nozik in Kotlin Community
там нет пересортировки, а древесная мапа под низом
источник

AF

Alex F. in Kotlin Community
Alexander Nozik
Ну так и держите их в коллекции. Выходной flow тут совсем не нужен.
Так мне в collect в итоге и приходит отсортированная коллекция.
источник

AN

Alexander Nozik in Kotlin Community
А зачем это делать внутри Flow?
источник

AF

Alex F. in Kotlin Community
Alexander Nozik
А зачем это делать внутри Flow?
Чтобы это все сортировки и другие вычисления прошли на дефолтном диспатчере, а я бы получил готовый результат на мэйне внутри collect.
источник

AN

Alexander Nozik in Kotlin Community
Alex F.
Чтобы это все сортировки и другие вычисления прошли на дефолтном диспатчере, а я бы получил готовый результат на мэйне внутри collect.
При чем тут Flow вообще?
val sorted = TreeSet()
launch(Default){
 flow.collect{
   sorted.add(it)
 }
}
источник

AN

Alexander Nozik in Kotlin Community
Добавляете синхронизацию по вкусу
источник

AF

Alex F. in Kotlin Community
Alexander Nozik
При чем тут Flow вообще?
val sorted = TreeSet()
launch(Default){
 flow.collect{
   sorted.add(it)
 }
}
Flow при том, что данные изначално приходят в callbackFlow.
У меня примерно так и работает, как вы написали, только сортировка в map, а не в collect.
Проблема, что мне не обновить comparator.
источник

AN

Alexander Nozik in Kotlin Community
Alex F.
Flow при том, что данные изначално приходят в callbackFlow.
У меня примерно так и работает, как вы написали, только сортировка в map, а не в collect.
Проблема, что мне не обновить comparator.
обновление компаратора - это перерасчет. Предлагаю складывать все в массив, а потом сделать вот так:

val data: List
val sortedData: List get() = data.sorted(comparator)

Оно будет пересчитываться на запрос. Иначе надо возиться с инвалидацией
источник

AF

Alex F. in Kotlin Community
Alexander Nozik
обновление компаратора - это перерасчет. Предлагаю складывать все в массив, а потом сделать вот так:

val data: List
val sortedData: List get() = data.sorted(comparator)

Оно будет пересчитываться на запрос. Иначе надо возиться с инвалидацией
В вашем примере же тоже можно поменять компаратор у TreeSet
источник

AN

Alexander Nozik in Kotlin Community
Alex F.
В вашем примере же тоже можно поменять компаратор у TreeSet
По-моему он там при создании зашивается
источник

BP

Bogdan Panchenko in Kotlin Community
Alexander Nozik
Я не понял, что означает менять логику внутри Flow. Есть map, если надо один в один отображать, если надо делать какие-то более сложные штуки, есть collect{}
Менять диспачер, я так думаю, но это не логика)
источник

AN

Alexander Nozik in Kotlin Community
Bogdan Panchenko
Менять диспачер, я так думаю, но это не логика)
Ну вроде пришли к выводу, что вообще не о корутинах вопрос
источник

LS

Lev Shagalov in Kotlin Community
Компилятор странно ругается на сериализацию после добавления

fun <T> T.wrapList() = listOf(this)
fun <T> T.wrapSet() = setOf(this)
inline fun <reified T> T.wrapArray() = arrayOf(this)
источник

LS

Lev Shagalov in Kotlin Community
Может я что то делаю не так?
источник

BP

Bogdan Panchenko in Kotlin Community
Alexander Nozik
Ну вроде пришли к выводу, что вообще не о корутинах вопрос
Да я дочитал)
источник

AN

Alexander Nozik in Kotlin Community
Lev Shagalov
Компилятор странно ругается на сериализацию после добавления

fun <T> T.wrapList() = listOf(this)
fun <T> T.wrapSet() = setOf(this)
inline fun <reified T> T.wrapArray() = arrayOf(this)
а при чем тут сериализация?
источник