Java 8 Streams非常强大,但在不需要并行处理时,使用Kotlin Sequence似乎更加简单易用。
有没有一种方式可以将stream.sequential()转换为Sequence呢?
Sequence
:Sequence
:Sequence { stream.iterator() }
UPD: 从 Kotlin 1.1 开始,您可以使用 Stream.asSequence()
扩展(请参见Michael Richardson 的答案),它与上面的代码完全相同。该扩展还适用于专业流: IntStream
、LongStream
和 DoubleStream
。kotlin.streams
包中的 kotlin-stdlib-jdk8
库(Kotlin 1.2 及以上版本)或在 kotlin-stdlib-jre8
库中(仅限 Kotlin 1.1,在 Kotlin 1.2 及以上版本中已弃用)。iterator()
函数时,是立即执行 (asSequence()
) 还是惰性执行 (Sequence { }
)。 - IlyaKotlin提供了一个扩展方法asSequence()
,可以将Java流转换为Kotlin序列。根据我的经验,在我添加了一个导入语句之后,这个方法才被发现:
import kotlin.streams.*
然后按预期使用即可:
val seq = stream.asSequence()