Что-то не найду функции создать sequence из одного...
# russian
b
Что-то не найду функции создать sequence из одного nullable элемента (empty sequence если null, или из 1 элемента если иначе)
i
sequenceOf + filterNotNull?
b
Слишком много будет по расходу памяти... там ж массив
это нужно в общем для flatMap
Что-то типа
Copy code
fun <T : Any> possiblySequence(element: T?): Sequence<T> =
    if (element == null) emptySequence() else sequenceOf(element)
но экономней
Copy code
internal class SingletonSequence<T>(private val element: T) : Sequence<T> {
    override fun iterator(): Iterator<T> = object : Iterator<T> {
        private var hasNext = true
        override fun hasNext(): Boolean = hasNext
        override fun next(): T = if (hasNext) {
            hasNext = false
            element
        } else {
            throw NoSuchElementException()
        }
    }
}
i
Ясно, возможно стоило бы завести
sequenceOfNotNull
по аналогии с
listOfNotNull
. Пока еще можно предложить
listOfNotNull(...).asSequence()
, или, если нужно сделать
flatMap
то:
Copy code
someSequence.map { listOfNotNull(possiblyNullableTransform(it)) }.flatten()
1
Кстати если в последнем примере лямбда действительно такая, т.к. возвращается список из 0 или 1 элемента, то это можно переписать еще эффективнее через `mapNotNull`:
Copy code
someSequence.mapNotNull { possiblyNullableTransform(it) }