From ac648a59403761250bbd8d75599014cf7acf37da Mon Sep 17 00:00:00 2001 From: Muskan Gupta Date: Mon, 21 Sep 2020 21:31:14 +0530 Subject: [PATCH] Adding example of fold for sink #25468 --- .../paradox/stream/operators/Sink/fold.md | 10 ++++++++ .../stream/operators/SinkDocExamples.java | 9 ++++++++ .../docs/stream/operators/sink/Fold.scala | 23 +++++++++++++++++++ 3 files changed, 42 insertions(+) create mode 100644 akka-docs/src/test/scala/docs/stream/operators/sink/Fold.scala diff --git a/akka-docs/src/main/paradox/stream/operators/Sink/fold.md b/akka-docs/src/main/paradox/stream/operators/Sink/fold.md index 818a8fecba..089a86f8f8 100644 --- a/akka-docs/src/main/paradox/stream/operators/Sink/fold.md +++ b/akka-docs/src/main/paradox/stream/operators/Sink/fold.md @@ -18,6 +18,16 @@ Materializes into a @scala[`Future`] @java[`CompletionStage`] that will complete This operator allows combining values into a result without a global mutable state by instead passing the state along between invocations. +## Example + +This example reads the numbers from a source and do some calculation in the flow part and in the end uses Sink.fold and adds the incoming elements. + +Scala +: @@snip [Fold.scala](/akka-docs/src/test/scala/docs/stream/operators/sink/Fold.scala) { #fold } + +Java +: @@snip [SinkDocExamples.java](/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java) { #fold } + ## Reactive Streams semantics @@@div { .callout } diff --git a/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java b/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java index e0d05d94af..67edda5560 100644 --- a/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java +++ b/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java @@ -105,6 +105,15 @@ public class SinkDocExamples { // #lastOption-operator-example } + static void foldExample() { + // #fold + Source source = Source.range(1, 100); + CompletionStage sum = + source.runWith(Sink.fold(0, (res, element) -> res + element), system); + sum.thenAccept(System.out::println); + // #fold + } + static void ignoreExample() { // #ignore Source lines = readLinesFromFile(); diff --git a/akka-docs/src/test/scala/docs/stream/operators/sink/Fold.scala b/akka-docs/src/test/scala/docs/stream/operators/sink/Fold.scala new file mode 100644 index 0000000000..564e73cb27 --- /dev/null +++ b/akka-docs/src/test/scala/docs/stream/operators/sink/Fold.scala @@ -0,0 +1,23 @@ +/* + * Copyright (C) 2020 Lightbend Inc. + */ + +package docs.stream.operators.sink + +import akka.actor.ActorSystem +import akka.stream.scaladsl.{ Sink, Source } + +import scala.concurrent.{ ExecutionContextExecutor, Future } + +object Fold { + implicit val system: ActorSystem = ??? + implicit val ec: ExecutionContextExecutor = system.dispatcher + def foldExample: Future[Unit] = { + //#fold + val source = Source(1 to 100) + val result: Future[Int] = source.runWith(Sink.fold(0)((acc, element) => acc + element)) + result.map(println) + //5050 + //#fold + } +}