在Kotlin中使用Sequence时如何处理掉入过滤器的元素

时间:2019-04-01 13:32:53

标签: kotlin

我想过滤列表并记录通过过滤器掉落的物品,类似于:

val evenNumbers = (1..10)
            .filter { it % 2 == 0 }
            .onFallThrough { println("dropped $it") }  // wishful Kotlin
            .toList()

这将导致以下输出:

dropped 1
dropped 3
dropped 5
dropped 7
dropped 9

以及列表evenNumbers中收集的所有偶数。

Sequences上的手册页中,我找不到任何能做到这一点的东西。有没有办法在Kotlin中实现这一目标?

1 个答案:

答案 0 :(得分:5)

我会使用partition

val evenNumbers = (1..10)
    .partition { it % 2 == 0 }
    .let {
        println("dropped ${it.second}")
        it.first
    }

它返回一个Pair,其first属性包含与条件匹配的所有元素,其second属性包含与条件不匹配的元素。