scan
Emit its current value, which starts at zero
, and then apply the current and next value to the given function, emitting the next current value.
Description
Emit its current value, which starts at zero
, and then apply the current and next value to the given function, emitting the next current value. This means that scan
emits one element downstream before, and upstream elements will not be requested until, the second element is required from downstream.
Note that the zero
value must be immutable.
emits when the function scanning the element returns a new element
backpressures when downstream backpressures
completes when upstream completes
Examples
- Scala
-
source
val source = Source(1 to 5) source.scan(0)((acc, x) => acc + x).runForeach(println) // 0 (= 0) // 1 (= 0 + 1) // 3 (= 0 + 1 + 2) // 6 (= 0 + 1 + 2 + 3) // 10 (= 0 + 1 + 2 + 3 + 4) // 15 (= 0 + 1 + 2 + 3 + 4 + 5)
- Java
-
source
Source<Integer, NotUsed> source = Source.range(1, 5); source.scan(0, (acc, x) -> acc + x).runForeach(System.out::println, materializer); // 0 (= 0) // 1 (= 0 + 1) // 3 (= 0 + 1 + 2) // 6 (= 0 + 1 + 2 + 3) // 10 (= 0 + 1 + 2 + 3 + 4) // 15 (= 0 + 1 + 2 + 3 + 4 + 5)