diff --git a/akka-docs/src/main/paradox/stream/operators/Sink/headOption.md b/akka-docs/src/main/paradox/stream/operators/Sink/headOption.md index e952021779..10e1539818 100644 --- a/akka-docs/src/main/paradox/stream/operators/Sink/headOption.md +++ b/akka-docs/src/main/paradox/stream/operators/Sink/headOption.md @@ -14,6 +14,16 @@ Materializes into a @scala[`Future[Option[T]]`] @java[`CompletionStage>`] which completes with the first value arriving wrapped in @scala[`Some`] @java[`Optional`], or @scala[a `None`] @java[an empty Optional] if the stream completes without any elements emitted. +## Example + +In this example there is an empty source i.e. it does not emit any element and to handle it we have used headOption operator which will complete with None. + +Scala +: @@snip [HeadOption.scala](/akka-docs/src/test/scala/docs/stream/operators/sink/HeadOption.scala) { #headoption } + +Java +: @@snip [SinkDocExamples.java](/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java) { #headoption } + ## 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 67edda5560..1d6f77bc93 100644 --- a/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java +++ b/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java @@ -114,6 +114,15 @@ public class SinkDocExamples { // #fold } + static void headOptionExample() { + // #headoption + Source source = Source.empty(); + CompletionStage> result = source.runWith(Sink.headOption(), system); + result.thenAccept(System.out::println); + // Optional.empty + // #headoption + } + static void ignoreExample() { // #ignore Source lines = readLinesFromFile(); diff --git a/akka-docs/src/test/scala/docs/stream/operators/sink/HeadOption.scala b/akka-docs/src/test/scala/docs/stream/operators/sink/HeadOption.scala new file mode 100644 index 0000000000..b6e80fcdb7 --- /dev/null +++ b/akka-docs/src/test/scala/docs/stream/operators/sink/HeadOption.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 HeadOption { + implicit val system: ActorSystem = ??? + implicit val ec: ExecutionContextExecutor = system.dispatcher + def headOptionExample(): Unit = { + //#headoption + val source = Source.empty + val result: Future[Option[Int]] = source.runWith(Sink.headOption) + result.foreach(println) + //None + //#headoption + } +}