Я не думаю, что есть способ сделать такое сложное преобразование в одну строку.Похоже, это уже довольно просто для меня:
fun takeFirstEven(f: Flowable<Int>): Flowable<Int> {
return f.filter { i -> i % 2 == 0 }.take(1)
}
val f: Maybe<Int> = Flowable
.fromArray(1, 3, 5, 6, 7, 8, 9)
.compose(::takeFirstEven)
.singleElement()
Хорошая новость заключается в том, что если ваши цели - просто возможность повторного использования , вы можете использовать функция расширения функций Котлина чтобы сделать именно это.
Поместите этот код туда, куда ваш код может получить доступ:
fun <T> Flowable<T>.toMaybe(filter: (T) -> Boolean): Maybe<T> {
return this.filter(filter).take(1).singleElement()
}
Тогда вы можете просто использовать toMaybe
в любом месте с любым фильтром, который вам нужен.
fun evenFilter(i: Int) = (i % 2) == 0
val f: Maybe<Int> = Flowable
.fromArray(1, 3, 5, 6, 7, 8, 9)
.toMaybe(::evenFilter)