Size: a a a

Kotlin Community

2020 July 08

AP

Anton Potekhin in Kotlin Community
@noraltavir , я подпарвил пример https://pl.kotl.in/0UGcttZll   мне нужно еще в функции передавать тип. Или я уже переработал и не смогу указать тип как свойство функции чтобы понять какой элемент из мап использовать
источник

AP

Anton Potekhin in Kotlin Community
Arkadii Ivanov
Есть Map.getValue(), он не может вернуть нулл.
судя по всему то что надо 😉
источник

AP

Anton Potekhin in Kotlin Community
Alexander Nozik
Проще всего, разумеется сделать свой экстеншен вот такой:
operator fun Map<MyEnum, MyValue>.getValue(myEnum) = get(myEnum)!!
как выше написали такой уже есть метод
источник

AP

Anton Potekhin in Kotlin Community
И новый вопрос. Есть map = MutableMap<Obj1, MutableList<Obj2>>
нужно сделать копию.  Да сейчас я сделал так map.mapKeys {it.key.copy()}.mapValues{it.value.map {it.copy}}
Выглядит ужасно 😉 есть какой-то более адекватный способ сделать полную копию Map кроме как написать свое расширение ?
источник

RB

Roman Byakov in Kotlin Community
Привет, не могу понять будет ли тут 2 цикла и на операции any
источник

RB

Roman Byakov in Kotlin Community
.map { list ->
   list.filter { client ->
       val selected = filters.filter { it.isActive }.map { it.id }
       client.priorityFilters.any { selected.contains(it) } || selected.isEmpty()
   }
}
источник

AL

Alexander Levin in Kotlin Community
Roman Byakov
.map { list ->
   list.filter { client ->
       val selected = filters.filter { it.isActive }.map { it.id }
       client.priorityFilters.any { selected.contains(it) } || selected.isEmpty()
   }
}
Не совсем понятен вопрос.
Пока что у вас условно несколько повторяющихся циклов:
.map внешний, наверное не устраняется
.filter внешний, наверное не устраняется
filters.filter { it.isActive }.map { it.id } наверное можно вынести куда-то вверх, чтобы не пересчитывать
.any { selected.contains(it) } условно может быть долгим, если что-то из этого сколько-либо большое (client.priorityFilters или selected), но эту проблему можно убить кучей способов
источник

RB

Roman Byakov in Kotlin Community
по подсказке придумал сделать в хэшсет одну из коллекций, потом в нее addAll вторую и проверить длинну
источник

RB

Roman Byakov in Kotlin Community
волновал сам any и в нем contains думал какой нибудь магией не будет сложности квадрат)
источник

AL

Alexander Levin in Kotlin Community
Ну т.е. iterable.any { it in someList } это действительно может быть что-то вроде квадрата.
Но вариантов убить эту сложность много, вплоть до просто перегнать selected в Set (тогда условно линейная сложность) из того, что в меньшее количество изменений (ваш скорее всего тоже подойдёт, да)
источник

RB

Roman Byakov in Kotlin Community
фенкс
источник

RB

Roman Byakov in Kotlin Community
val selected = filters.filter { it.isActive }.mapTo(HashSet()) { it.id }
val sum = selected.size + client.priorityFilters.size
selected.addAll(client.priorityFilters)
selected.size < sum || selected.isEmpty()

что то такое
источник
2020 July 09

AH

Ayrat Hudaygulov in Kotlin Community
товарищи, есть функция с сигнатурой без суспенда, внутри которой надо вызвать саспенд функцию и неблокируеще повесить континуейшн по окончанию
источник

AH

Ayrat Hudaygulov in Kotlin Community
Как сделать?)
источник

AH

Ayrat Hudaygulov in Kotlin Community
runBlocking звучит страшно
источник

RI

Ruslan Ibragimov in Kotlin Community
Ну в идеале suspend fun main() {}
источник

AH

Ayrat Hudaygulov in Kotlin Community
ну в идеале понятно. А у меня на руках

override foo(completableFuture: CompletableFuture<…>): Unit =
источник

AH

Ayrat Hudaygulov in Kotlin Community
то есть сигнатуру поменять нельзя, в континуейшне надо просто заполнить комплитабл футуру
источник

RI

Ruslan Ibragimov in Kotlin Community
scope.launch {
   val a = suspendCall1()
   val b = suspendCall2(a)

   future.complete(b)
}
источник

AH

Ayrat Hudaygulov in Kotlin Community
вызывающая функция же освободится, да? это важно
источник