Kotlin Stream peek(...) 方法

2022-09-02 03:00:40

在 Kotlin 中,java.util.stream.Stream<>.peek(...) 的最佳替代方案是什么?

https://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html#peek-java.util.function.Consumer-

似乎没有替代的中间操作:

https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.streams/index.html

我发现只终止 forEach(...)


答案 1

Kotlin 中的 Stream 替代方案是 Sequences

 listOf(1, 2, 3, 4, 5)
    .asSequence()
    .filter { it < 3 }
    .onEach { println("filtered $it") }
    .map { it * 10 }
    .forEach { println("final: $it") }

onEach 可以做一些事情。peek

有趣的事实:在Java明确做同样的事情之前,Kotlin还想将他们的序列称为“Streams”,因此他们将其重命名为“Sequences”。


答案 2

首先,与 Kotlin 中的 Java 不同,您可以对任何类型的集合执行流处理(map/reduce 操作),例如:

val list = ArrayList<Int>()
list.forEach {  }
list.onEach {  } 

但是,以这种方式定义的操作不会被懒惰地计算,如果我们需要通过应用该方法并从集合生成流来延迟计算。.asSequence()

最后回答你的问题相当于onEach()peek()


推荐