Introduce runningFold and runningReduce operations

runningFold is a synonym for scan,
runningReduce replaces scanReduce.

#KT-38060
This commit is contained in:
Ilya Gorbunov
2020-04-14 14:34:02 +03:00
parent 37277d71de
commit 893021f22b
13 changed files with 1551 additions and 516 deletions
@@ -722,12 +722,21 @@ class Collections {
}
@Sample
fun scanReduce() {
fun runningFold() {
val strings = listOf("a", "b", "c", "d")
assertPrints(strings.scanReduce { acc, string -> acc + string }, "[a, ab, abc, abcd]")
assertPrints(strings.scanReduceIndexed { index, acc, string -> acc + string + index }, "[a, ab1, ab1c2, ab1c2d3]")
assertPrints(strings.runningFold("s") { acc, string -> acc + string }, "[s, sa, sab, sabc, sabcd]")
assertPrints(strings.runningFoldIndexed("s") { index, acc, string -> acc + string + index }, "[s, sa0, sa0b1, sa0b1c2, sa0b1c2d3]")
assertPrints(emptyList<String>().scanReduce { _, _ -> "X" }, "[]")
assertPrints(emptyList<String>().runningFold("s") { _, _ -> "X" }, "[s]")
}
@Sample
fun runningReduce() {
val strings = listOf("a", "b", "c", "d")
assertPrints(strings.runningReduce { acc, string -> acc + string }, "[a, ab, abc, abcd]")
assertPrints(strings.runningReduceIndexed { index, acc, string -> acc + string + index }, "[a, ab1, ab1c2, ab1c2d3]")
assertPrints(emptyList<String>().runningReduce { _, _ -> "X" }, "[]")
}
}