zipWith

Combines elements from multiple sources through a combine function and passes the returned value downstream.

Fan-in operators

Signature

Source.zipWithSource.zipWith Flow.zipWithFlow.zipWith

Description

Combines elements from multiple sources through a combine function and passes the returned value downstream.

See also:

Examples

Scala
import akka.stream.scaladsl.Source
import akka.stream.scaladsl.Sink

    val sourceCount = Source(List("one", "two", "three"))
    val sourceFruits = Source(List("apple", "orange", "banana"))

    sourceCount
      .zipWith(sourceFruits) { (countStr, fruitName) =>
        s"$countStr $fruitName"
      }
      .runWith(Sink.foreach(println))
    // this will print 'one apple', 'two orange', 'three banana'
Java
import akka.stream.javadsl.Source;
import akka.stream.javadsl.Sink;
import java.util.Arrays;

Source<String, NotUsed> sourceCount = Source.from(Arrays.asList("one", "two", "three"));
Source<String, NotUsed> sourceFruits = Source.from(Arrays.asList("apple", "orange", "banana"));
sourceCount
    .zipWith(
        sourceFruits,
        (Function2<String, String, String>) (countStr, fruitName) -> countStr + " " + fruitName)
    .runWith(Sink.foreach(System.out::print), system);
// this will print 'one apple', 'two orange', 'three banana'

Reactive Streams semantics

emits when all of the inputs have an element available

backpressures both upstreams when downstream backpressures but also on an upstream that has emitted an element until the other upstream has emitted an element

completes when any upstream completes

Found an error in this documentation? The source code for this page can be found here. Please feel free to edit and contribute a pull request.