Size: a a a

Kotlin Community

2019 December 19

A

Aleksandr in Kotlin Community
Похожая история. Вызов yield() в начале onEach помогает
источник

AM

Andrew Mikhaylov in Kotlin Community
Aleksandr
Похожая история. Вызов yield() в начале onEach помогает
ensureActive лучше yield, если вам действительно не нужно переключать контекст перед обработкой каждого элемента.
источник

A

Aleksandr in Kotlin Community
Andrew Mikhaylov
ensureActive лучше yield, если вам действительно не нужно переключать контекст перед обработкой каждого элемента.
Мне НЕ нужно переключать контекст, но ensureActive не работает.
источник

VT

Vsevolod Tolstopyatov in Kotlin Community
Aleksandr
Мне НЕ нужно переключать контекст, но ensureActive не работает.
это либо баг, потому что и yield, и ensureActive один и тот же механизм внутри используют, либо две нетривиально связанные через канал корутины на одном однопоточном диспатчере
источник

VT

Vsevolod Tolstopyatov in Kotlin Community
было бы здорово, если бы вы self-contained репродьюсер в тикет закинули
источник

A

Aleksandr in Kotlin Community
Vsevolod Tolstopyatov
было бы здорово, если бы вы self-contained репродьюсер в тикет закинули
Вот набрасал https://pl.kotl.in/RbhYc5_BO
источник

A

Aleksandr in Kotlin Community
Повторяемость не 100%, нужно позапускать пару раз
источник

VT

Vsevolod Tolstopyatov in Kotlin Community
это смешная проблема
источник

VT

Vsevolod Tolstopyatov in Kotlin Community
ensureActive резолвится в экстеншн на runBlocking %)
источник

VT

Vsevolod Tolstopyatov in Kotlin Community
не самое очевидное поведение, конечно
источник

VT

Vsevolod Tolstopyatov in Kotlin Community
лечится явным выписыванием ресивера: kotlin.coroutines.coroutineContext.ensureActive()
источник

A

Aleksandr in Kotlin Community
Vsevolod Tolstopyatov
ensureActive резолвится в экстеншн на runBlocking %)
Спасибо
источник

A

Aleksandr in Kotlin Community
Vsevolod Tolstopyatov
это смешная проблема
(где-то в далеке слышан смех Гарольда)
источник

VT

Vsevolod Tolstopyatov in Kotlin Community
я пытался это @DslMarker’ами полечить, но там к сожалению не сходится
источник

KD

Konstantin Dovnar in Kotlin Community
А чего в stdlib нет flatMapIndexed? 🤔
источник

IS

Ignat Simonenko in Kotlin Community
Konstantin Dovnar
А чего в stdlib нет flatMapIndexed? 🤔
а какой у вас кейс использования?
источник

KD

Konstantin Dovnar in Kotlin Community
Ignat Simonenko
а какой у вас кейс использования?
При flatMap'ингде мне нужно в новый элемент сохранять позицию из какого элемента оно создавалось.
источник

AL

Alexander Levin in Kotlin Community
Konstantin Dovnar
При flatMap'ингде мне нужно в новый элемент сохранять позицию из какого элемента оно создавалось.
Как обычно предположу, что юзкейсов было просто мало, для того, чтобы пихать в стдлибу. Но да, как обычно всегда можно написать у себя сбоку:

inline fun <T, R> Iterable<T>.flatMapIndexed(transform: (index: Int, T) -> Iterable<R>): List<R> {
   return flatMapIndexedTo(ArrayList(), transform)
}

inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Iterable<R>): C {
   for ((index, element) in withIndex()) {
       val list = transform(index, element)
       destination.addAll(list)
   }
   return destination
}

listOf(4, 5, 5).flatMapIndexed { index, i -> listOf(index * index + index, i * i + i) }
источник

KD

Konstantin Dovnar in Kotlin Community
Alexander Levin
Как обычно предположу, что юзкейсов было просто мало, для того, чтобы пихать в стдлибу. Но да, как обычно всегда можно написать у себя сбоку:

inline fun <T, R> Iterable<T>.flatMapIndexed(transform: (index: Int, T) -> Iterable<R>): List<R> {
   return flatMapIndexedTo(ArrayList(), transform)
}

inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Iterable<R>): C {
   for ((index, element) in withIndex()) {
       val list = transform(index, element)
       destination.addAll(list)
   }
   return destination
}

listOf(4, 5, 5).flatMapIndexed { index, i -> listOf(index * index + index, i * i + i) }
Да я уже написал, просто удивлён, что этого нет:)
источник

VP

Vladimir Petrakovich in Kotlin Community
Alexander Levin
Как обычно предположу, что юзкейсов было просто мало, для того, чтобы пихать в стдлибу. Но да, как обычно всегда можно написать у себя сбоку:

inline fun <T, R> Iterable<T>.flatMapIndexed(transform: (index: Int, T) -> Iterable<R>): List<R> {
   return flatMapIndexedTo(ArrayList(), transform)
}

inline fun <T, R, C : MutableCollection<in R>> Iterable<T>.flatMapIndexedTo(destination: C, transform: (index: Int, T) -> Iterable<R>): C {
   for ((index, element) in withIndex()) {
       val list = transform(index, element)
       destination.addAll(list)
   }
   return destination
}

listOf(4, 5, 5).flatMapIndexed { index, i -> listOf(index * index + index, i * i + i) }
А можно просто mapIndexed(...).flatten()
источник