如何将java.util.stream.Stream <Something>转换为kotlin.Sequence <Something>

ato*_*tok 13 java kotlin java-stream

Java 8 Streams非常强大,但是当不需要并行性时,Kotlin Sequence似乎更易于使用.

有没有办法将a stream.sequencial()转换为序列?

Ily*_*lya 17

您可以从流中获取迭代器,然后将迭代器包装到Sequence:

Sequence { stream.iterator() }
Run Code Online (Sandbox Code Playgroud)

UPD:从Kotlin 1.1开始你可以使用Stream.asSequence()扩展(参见Michael Richardson的回答),它与上面完全相同.该扩展还提供了专门的流:IntStream,LongStreamDoubleStream.

它位于kotlin.streams包在kotlin-stdlib-jdk8库(科特林1.2及以上)或在kotlin-stdlib-jre8库(科特林1.1只,在科特林1.2及以上建议使用).

  • 是的,几乎是一样的.这里的区别在于,在Stream上立即调用`iterator()`函数(`asSequence()`)或懒惰(`Sequence {}`). (4认同)
  • 大!我看到还有Iterator <T> .asSequence()所以我可以说:stream.iterator().asSequence() (2认同)

Mic*_*son 7

Kotlin有一种asSequence()将Java流转换为Kotlin序列的扩展方法.根据我的经验,在我添加一个import语句之前它是不可发现的:

import kotlin.streams.*
Run Code Online (Sandbox Code Playgroud)

然后只需按预期使用:

val seq = stream.asSequence()
Run Code Online (Sandbox Code Playgroud)