public void run(final Materializer mat) throws TimeoutException, InterruptedException, ExecutionException { // #backpressure-by-readline final CompletionStage<Done> completion = Source.from(Arrays.asList(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)) .map( i -> { System.out.println("map => " + i); return i; }) .runForeach( i -> System.console() .readLine("Element = %s continue reading? [press enter]\n", i), mat); completion.toCompletableFuture().get(1, TimeUnit.SECONDS); // #backpressure-by-readline }
abstract static class Model { // #model public static class Author { public final String handle; public Author(String handle) { this.handle = handle; } // ... // #model @Override public String toString() { return "Author(" + handle + ")"; } @Override public boolean equals(Object o) { if (this == o) { return true; } if (o == null || getClass() != o.getClass()) { return false; } Author author = (Author) o; if (handle != null ? !handle.equals(author.handle) : author.handle != null) { return false; } return true; } @Override public int hashCode() { return handle != null ? handle.hashCode() : 0; } // #model } // #model // #model public static class Hashtag { public final String name; public Hashtag(String name) { this.name = name; } // ... // #model @Override public int hashCode() { return name.hashCode(); } @Override public boolean equals(Object obj) { if (this == obj) return true; if (obj == null) return false; if (getClass() != obj.getClass()) return false; Hashtag other = (Hashtag) obj; return name.equals(other.name); } @Override public String toString() { return "Hashtag(" + name + ")"; } // #model } // #model // #model public static class Tweet { public final Author author; public final long timestamp; public final String body; public Tweet(Author author, long timestamp, String body) { this.author = author; this.timestamp = timestamp; this.body = body; } public Set<Hashtag> hashtags() { return Arrays.asList(body.split(" ")) .stream() .filter(a -> a.startsWith("#")) .map(a -> new Hashtag(a)) .collect(Collectors.toSet()); } // ... // #model @Override public String toString() { return "Tweet(" + author + "," + timestamp + "," + body + ")"; } // #model } // #model // #model public static final Hashtag AKKA = new Hashtag("#akka"); // #model public static final Source<Tweet, NotUsed> tweets = Source.from( Arrays.asList( new Tweet[] { new Tweet(new Author("rolandkuhn"), System.currentTimeMillis(), "#akka rocks!"), new Tweet(new Author("patriknw"), System.currentTimeMillis(), "#akka !"), new Tweet(new Author("bantonsson"), System.currentTimeMillis(), "#akka !"), new Tweet(new Author("drewhk"), System.currentTimeMillis(), "#akka !"), new Tweet( new Author("ktosopl"), System.currentTimeMillis(), "#akka on the rocks!"), new Tweet(new Author("mmartynas"), System.currentTimeMillis(), "wow #akka !"), new Tweet(new Author("akkateam"), System.currentTimeMillis(), "#akka rocks!"), new Tweet(new Author("bananaman"), System.currentTimeMillis(), "#bananas rock!"), new Tweet(new Author("appleman"), System.currentTimeMillis(), "#apples rock!"), new Tweet( new Author("drama"), System.currentTimeMillis(), "we compared #apples to #oranges!") })); }