Be careful with those functions on large collections, though. Most of them will copy the collection for the sake of immutability.
Functions starting with as won't do that, though:
// Returns a view, no copy here
(1..10).toList().asReversed()
// Same here
(1..10).toList().asSequence()
To understand the difference, check the following code:
val numbers = (1..1_000_000).toList()
println(measureTimeMillis {
numbers.stream().map {
it * it
}
}) // ~2ms
println(measureTimeMillis {
numbers.map {
it * it
}
}) // ~19ms
You'll notice that code using stream() actually never executes. Streams, being lazy, wait for a terminating function call. Functions on collections, on the other hand, execute one after the other.
If we add the terminating call though, we'll see totally different numbers:
println(measureTimeMillis {
...