【问题标题】:Kotlin Stream peek(...) methodKotlin Stream peek(...) 方法
【发布时间】:2019-03-01 13:32:26
【问题描述】:

在 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(...)

【问题讨论】:

标签: java kotlin java-stream


【解决方案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 所做的事情。

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

【讨论】:

    【解决方案2】:

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

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

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

    终于回答你的问题了onEach()相当于peek()

    【讨论】:

      猜你喜欢
      • 2012-05-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 2021-01-20
      • 1970-01-01
      相关资源
      最近更新 更多