Docs: mergeLatest (#28586)
This commit is contained in:
parent
8e0c8d07b9
commit
0e3cfbf584
3 changed files with 85 additions and 6 deletions
|
|
@ -4,20 +4,30 @@ Merge multiple sources.
|
|||
|
||||
@ref[Fan-in operators](../index.md#fan-in-operators)
|
||||
|
||||
@@@div { .group-scala }
|
||||
|
||||
## Signature
|
||||
|
||||
@@signature [Flow.scala](/akka-stream/src/main/scala/akka/stream/scaladsl/Flow.scala) { #mergeLatest }
|
||||
|
||||
@@@
|
||||
@apidoc[Flow.mergeLatest](Flow) { scala="#mergeLatest[U%3E:Out,M](that:akka.stream.Graph[akka.stream.SourceShape[U],M],eagerComplete:Boolean):FlowOps.this.Repr[scala.collection.immutable.Seq[U]]" java="#mergeLatest(akka.stream.Graph,boolean)" }
|
||||
|
||||
## Description
|
||||
|
||||
MergeLatest joins elements from N input streams into stream of lists of size N.
|
||||
i-th element in list is the latest emitted element from i-th input stream.
|
||||
The i-th element in list is the latest emitted element from i-th input stream.
|
||||
MergeLatest emits list for each element emitted from some input stream,
|
||||
but only after each input stream emitted at least one element
|
||||
If `eagerComplete` is set to true then it completes as soon as the first upstream
|
||||
completes otherwise when all upstreams complete.
|
||||
|
||||
## Example
|
||||
|
||||
This example takes a stream of prices and quantities and emits the price each time the
|
||||
price of quantity changes:
|
||||
|
||||
Scala
|
||||
: @@snip [MergeLatest.scala](/akka-docs/src/test/scala/docs/stream/operators/sourceorflow/MergeLatest.scala) { #mergeLatest }
|
||||
|
||||
Java
|
||||
: @@snip [MergeLatest.java](/akka-docs/src/test/java/jdocs/stream/operators/sourceorflow/MergeLatest.java) { #mergeLatest }
|
||||
|
||||
|
||||
## Reactive Streams semantics
|
||||
|
||||
|
|
|
|||
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
* Copyright (C) 2020 Lightbend Inc. <https://www.lightbend.com>
|
||||
*/
|
||||
|
||||
package jdocs.stream.operators.sourceorflow;
|
||||
|
||||
import akka.NotUsed;
|
||||
import akka.actor.typed.ActorSystem;
|
||||
import akka.stream.javadsl.Source;
|
||||
|
||||
import java.util.Arrays;
|
||||
|
||||
public class MergeLatest {
|
||||
|
||||
private static final ActorSystem<Void> system = null;
|
||||
|
||||
public static void example() {
|
||||
// #mergeLatest
|
||||
Source<Integer, NotUsed> prices = Source.from(Arrays.asList(100, 101, 99, 103));
|
||||
Source<Integer, NotUsed> quantities = Source.from(Arrays.asList(1, 3, 4, 2));
|
||||
|
||||
prices
|
||||
.mergeLatest(quantities, true)
|
||||
.map(priceAndQuantity -> priceAndQuantity.get(0) * priceAndQuantity.get(1))
|
||||
.runForeach(System.out::println, system);
|
||||
|
||||
// prints something like:
|
||||
// 100
|
||||
// 101
|
||||
// 303
|
||||
// 297
|
||||
// 396
|
||||
// 412
|
||||
// 206
|
||||
// #mergeLatest
|
||||
}
|
||||
}
|
||||
|
|
@ -0,0 +1,32 @@
|
|||
/*
|
||||
* Copyright (C) 2020 Lightbend Inc. <https://www.lightbend.com>
|
||||
*/
|
||||
|
||||
package docs.stream.operators.sourceorflow
|
||||
import akka.actor.ActorSystem
|
||||
import akka.stream.scaladsl.Source
|
||||
|
||||
object MergeLatest extends App {
|
||||
implicit val system = ActorSystem()
|
||||
|
||||
//#mergeLatest
|
||||
val prices = Source(List(100, 101, 99, 103))
|
||||
val quantity = Source(List(1, 3, 4, 2))
|
||||
|
||||
prices
|
||||
.mergeLatest(quantity)
|
||||
.map {
|
||||
case price :: quantity :: Nil => price * quantity
|
||||
}
|
||||
.runForeach(println)
|
||||
|
||||
// prints something like:
|
||||
// 100
|
||||
// 101
|
||||
// 303
|
||||
// 297
|
||||
// 396
|
||||
// 412
|
||||
// 206
|
||||
//#mergeLatest
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue