What is the best alternative in Kotlin to java.util.stream.Stream<>.peek(...)?
Seems there are no alternative intermediate operations:
https://kotlinlang.org/api/latest/jvm/stdlib/kotlin.streams/index.html
I found only terminating forEach(...)
The Stream alternative in Kotlin is Sequences.
listOf(1, 2, 3, 4, 5)
.asSequence()
.filter { it < 3 }
.onEach { println("filtered $it") }
.map { it * 10 }
.forEach { println("final: $it") }
There's onEach to do what peek does.
Fun fact: Kotlin also wanted to call their sequences "Streams" before it was clear that Java would do the same, so they renamed it to "Sequences".
Firstly, unlike Java in Kotlin, you can perform stream processing (map/reduce operations) on any type of collection for example:
val list = ArrayList<Int>()
list.forEach { }
list.onEach { }
However the operations defined in this way are not lazily evaluated and if we need lazy evaluation by applying the method .asSequence() and generate a stream from collection.
Finally to answer your question onEach() is the equivalent of peek()