From 531b645a40be1a0a75955d0aca82e66277c2ae31 Mon Sep 17 00:00:00 2001 From: mohammad mehdi Date: Fri, 12 Oct 2018 21:37:52 +0330 Subject: [PATCH] Adds example for lastOption operator #25468 --- .../stream/operators/Sink/lastOption.md | 7 +++++ .../stream/operators/SinkDocExamples.java | 26 ++++++++++++----- .../akka/stream/scaladsl/LastSinkSpec.scala | 29 +++++++++++-------- .../stream/scaladsl/TakeLastSinkSpec.scala | 2 +- 4 files changed, 43 insertions(+), 21 deletions(-) diff --git a/akka-docs/src/main/paradox/stream/operators/Sink/lastOption.md b/akka-docs/src/main/paradox/stream/operators/Sink/lastOption.md index 78fe557f316f..d9eddd04a071 100644 --- a/akka-docs/src/main/paradox/stream/operators/Sink/lastOption.md +++ b/akka-docs/src/main/paradox/stream/operators/Sink/lastOption.md @@ -27,3 +27,10 @@ completed with @scala[`None`] @java[an empty `Optional`]. @@@ +## Example + +Scala +: @@snip [LastSinkSpec.scala](/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LastSinkSpec.scala) { #lastOption-operator-example } + +Java +: @@snip [SinkDocExamples.java](/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java) { #lastOption-operator-example } \ No newline at end of file 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 ab8ccecfbacc..fcac85238fb8 100644 --- a/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java +++ b/akka-docs/src/test/java/jdocs/stream/operators/SinkDocExamples.java @@ -6,6 +6,7 @@ import akka.NotUsed; import akka.actor.ActorSystem; +import akka.japi.Pair; import akka.stream.ActorMaterializer; import akka.stream.Materializer; import akka.stream.javadsl.Sink; @@ -37,19 +38,19 @@ static void reduceExample() throws InterruptedException, ExecutionException, Tim static void takeLastExample() throws InterruptedException, ExecutionException, TimeoutException { //#takeLast-operator-example // tuple of (Name, GPA) - List sortedStudents = Arrays.asList(new Tuple2("Benita", 2.1), new Tuple2("Adrian", 3.1), - new Tuple2("Alexis", 4), new Tuple2("Kendra", 4.2), new Tuple2("Jerrie", 4.3), new Tuple2("Alison", 4.7)); + List sortedStudents = Arrays.asList(new Pair<>("Benita", 2.1), new Pair<>("Adrian", 3.1), + new Pair<>("Alexis", 4), new Pair<>("Kendra", 4.2), new Pair<>("Jerrie", 4.3), new Pair<>("Alison", 4.7)); - Source studentSource = Source.from(sortedStudents); + Source studentSource = Source.from(sortedStudents); - CompletionStage> topThree = studentSource.runWith(Sink.takeLast(3), materializer); + CompletionStage> topThree = studentSource.runWith(Sink.takeLast(3), materializer); - List result = topThree.toCompletableFuture().get(3, TimeUnit.SECONDS); + List result = topThree.toCompletableFuture().get(3, TimeUnit.SECONDS); System.out.println("#### Top students ####"); for (int i = result.size() - 1; i >= 0; i--) { - Tuple2 s = result.get(i); - System.out.println("Name: " + s._1 + ", " + "GPA: " + s._2); + Pair s = result.get(i); + System.out.println("Name: " + s.first() + ", " + "GPA: " + s.second()); } /* #### Top students #### @@ -57,7 +58,7 @@ static void takeLastExample() throws InterruptedException, ExecutionException, T Name: Jerrie, GPA: 4.3 Name: Kendra, GPA: 4.2 */ - //#takeLast-operator-example + //#takeLast-operator-example } static void lastExample() throws InterruptedException, ExecutionException, TimeoutException { @@ -70,4 +71,13 @@ static void lastExample() throws InterruptedException, ExecutionException, Timeo //#last-operator-example } + static void lastOptionExample() throws InterruptedException, ExecutionException, TimeoutException { + //#lastOption-operator-example + Source source = Source.empty(); + CompletionStage> result = source.runWith(Sink.lastOption(), materializer); + Optional optItem = result.toCompletableFuture().get(3, TimeUnit.SECONDS); + System.out.println(optItem); + // Optional.empty + //#lastOption-operator-example + } } \ No newline at end of file diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LastSinkSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LastSinkSpec.scala index 583ab428df87..f4dcad42162d 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LastSinkSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/LastSinkSpec.scala @@ -1,30 +1,29 @@ /** - * Copyright (C) 2014-2018 Lightbend Inc. - */ + * Copyright (C) 2014-2018 Lightbend Inc. + */ package akka.stream.scaladsl -import scala.concurrent.Await -import scala.concurrent.duration._ - -import akka.stream.ActorMaterializer -import akka.stream.ActorMaterializerSettings +import akka.stream.{ActorMaterializer, ActorMaterializerSettings} import akka.stream.testkit._ -import akka.stream.testkit.Utils._ import akka.stream.testkit.scaladsl.StreamTestKit._ +import scala.concurrent.duration._ +import scala.concurrent.{Await, Future} + class LastSinkSpec extends StreamSpec with ScriptedTest { val settings = ActorMaterializerSettings(system) implicit val materializer: ActorMaterializer = ActorMaterializer(settings) + implicit val ec = system.dispatcher "A Flow with Sink.last" must { - "yield the last value" in { + "yield the last value" in { //#last-operator-example val source = Source(1 to 10) - val result = source.runWith(Sink.last) + val result: Future[Int] = source.runWith(Sink.last) result.map(println) // 10 //#last-operator-example @@ -58,8 +57,14 @@ class LastSinkSpec extends StreamSpec with ScriptedTest { } should be theSameInstanceAs (ex) } - "yield None for empty stream" in assertAllStagesStopped { - Await.result(Source.empty[Int].runWith(Sink.lastOption), 1.second) should be(None) + "yield None for empty stream" in { + //#lastOption-operator-example + val source = Source.empty[Int] + val result: Future[Option[Int]] = source.runWith(Sink.lastOption) + result.map(println) + // None + //#lastOption-operator-example + result.futureValue shouldEqual None } } diff --git a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/TakeLastSinkSpec.scala b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/TakeLastSinkSpec.scala index 33102d86d348..baff0e11dc4b 100644 --- a/akka-stream-tests/src/test/scala/akka/stream/scaladsl/TakeLastSinkSpec.scala +++ b/akka-stream-tests/src/test/scala/akka/stream/scaladsl/TakeLastSinkSpec.scala @@ -35,7 +35,7 @@ class TakeLastSinkSpec extends StreamSpec { val sourceOfStudents = Source(students) - val result = sourceOfStudents.runWith(Sink.takeLast(3)) + val result: Future[Seq[Student]] = sourceOfStudents.runWith(Sink.takeLast(3)) result.foreach { topThree ⇒ println("#### Top students ####")