我想过滤列表并记录通过过滤器掉落的物品,类似于:
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中实现这一目标?
答案 0 :(得分:5)
我会使用partition
:
val evenNumbers = (1..10)
.partition { it % 2 == 0 }
.let {
println("dropped ${it.second}")
it.first
}
它返回一个Pair
,其first
属性包含与条件匹配的所有元素,其second
属性包含与条件不匹配的元素。