假设我有一个Sequence<Int>
来源未知(不一定来自集合)且大小未知但有限的:
val seq = sequenceOf(1, 2, -3, 4, 5, /* ... */)
假设序列足够大,不希望将整个序列转换为List
.
我想获取序列的最后一个元素:
val last = seq.last()
但我也想捕获可能出现的任何“无效”元素(假设负数无效)并返回第一个此类元素:
val invalid = seq.first { it < 0 }
但我怎样才能同时做这两件事呢?
val lastUnlessInvalidElementPresent = seq.firstOrNull { it < 0 } ?: seq.last()
问题是这?: seq.last()
不起作用,因为当firstOrNull
返回 null 时,整个序列已被消耗。
我可以迭代地执行此操作,但更喜欢功能性解决方案。