Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda...
Transcript of Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda...
![Page 1: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/1.jpg)
Reactive Programming in JavaCopyright - Syncogni Consulting Pvt Ltd. All rights reserved.
![Page 2: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/2.jpg)
Prerequisites:
● Functional Programming as in Java 8● Streams of Java 8● Lambda expressions● Method references
![Page 3: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/3.jpg)
Expectations from the participants?
![Page 4: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/4.jpg)
● The slides are a bit descriptive, because:○ anybody can use it even after the session without
trainer○ it serves as PPT + study material○ participants read it silently/aloud during session
to maximize participation
Note:
![Page 5: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/5.jpg)
Teaser begins….
![Page 6: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/6.jpg)
● Responsive● Resilient● Elastic● Message Driven
Official Reactive Manifesto
![Page 7: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/7.jpg)
Get the official ribbon!!!
![Page 8: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/8.jpg)
![Page 9: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/9.jpg)
![Page 10: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/10.jpg)
![Page 11: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/11.jpg)
Teaser Ends….
![Page 12: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/12.jpg)
Trailer begins….
![Page 13: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/13.jpg)
● Reactive = showing response to a stimulus● Reactive / Responsive● Scalable● Resilient / fault tolerant● Event driven● Observable sequences● Backpressure● Represented using marble diagrams
Reactive Programming
![Page 14: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/14.jpg)
Reactive Programming
● Async facade - design pattern● Asynchronous
○ Ex 1: Do x, y, z after p is done○ Ex 2: Do p, q after r is started○ Ex 3:
![Page 15: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/15.jpg)
Reactive Programming
● Polyglot● Implemented (Library is available) in
○ .NET○ Scala○ Clojure○ JavaScript○ Ruby○ Python○ C++, Groovy, Objective-C/Cocoa etc.
![Page 16: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/16.jpg)
Reactive Programming
● Java Implementations:○ RxJava from Netflix○ Spring 5○ JSR 166 (headed by Doug Lee) to be implemented
in Java 9○ http://www.reactive-streams.org/○ Vert.x 3.0
![Page 17: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/17.jpg)
What is RxJava?
Note : RxJava = Reactive Extensions for Java
“A library for composing asynchronous and event based programs using observable sequences for the Java VM”
- Netflix
![Page 18: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/18.jpg)
● We are not blocked on some operation● We will respond to an event as and when we
receive the notification of that event● When / if the stock price changes, we will be
notified. Then only we will take appropriate action
● If the cricket score changes, we will hear a loud noise, then only look at the screen :)
Why Rx?
![Page 19: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/19.jpg)
● We don’t wait for the entire web page to be downloaded to display it
● Keep pushing the election results as and when the change happens
● Divide and conquer approach● Keep pushing the information like blackberry● Users will react to the pushed data
Why Rx?
![Page 20: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/20.jpg)
Functional Reactive
Asynchronous
Values
Events
Push
Functional Reactive
Lambdas
Closures
Pure
Composable
![Page 21: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/21.jpg)
Imperative vs Reactive
Iterable Observable
pull push
T next() onNext(T)
throws Exception onError(Exception)
returns; onCompleted()
![Page 22: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/22.jpg)
Imperative vs Reactive
// Iterable<String> contains 379 strings
myIterable.skip( 16 ) //header.map( s -> s+”_transformed”)//blocking.forEach( e -> System.out.println(e) );
// Observable<String> contains 379 strings
myObservable.skip(16) //header.map( s -> s+" transformed" )//non-blocking.subscribe( e -> System.out.println(e) );
![Page 23: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/23.jpg)
Scenarios:
Single Multiple
Sync T getData() Iterable<T> getData()
Async Future<T> getData() Observable<T> getData()
![Page 24: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/24.jpg)
Trailer Ends!!!
![Page 25: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/25.jpg)
Movie Begins...
![Page 26: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/26.jpg)
Hello World RxJava
![Page 27: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/27.jpg)
![Page 28: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/28.jpg)
![Page 29: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/29.jpg)
![Page 30: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/30.jpg)
![Page 31: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/31.jpg)
![Page 32: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/32.jpg)
![Page 33: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/33.jpg)
![Page 34: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/34.jpg)
![Page 35: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/35.jpg)
![Page 36: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/36.jpg)
SubscriberSubscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
System.out.println(s);
}
@Override
public void onCompleted() {
System.out.println("Done");
}
@Override
public void onError(Throwable e) {
e.printStackTrace();
}
};
![Page 37: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/37.jpg)
ObservableObservable<String> myObservable = Observable.create(
new Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> sub) {
sub.onNext("Hello, world!");
sub.onCompleted();
}
});
![Page 38: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/38.jpg)
Connecting codemyObservable.subscribe(mySubscriber);
![Page 39: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/39.jpg)
HelloWorldRxJava - Demo
![Page 40: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/40.jpg)
Communication Protocol
● One item will be pushed to client during each ‘onNext’ call at the server side
● For every ‘onNext’ call on server, client can execute ‘onNext’ and receive an item
● Once server executes, ‘onCompleted’ or ‘onError’, it will not execute ‘onNext’ again
![Page 41: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/41.jpg)
Communication Protocol
● Client will not initiate ‘onNext’ or ‘onCompleted’ or ‘onError’, but, it is the server
● ‘onError’ signifies that there is some error at the observable’s side
● The observable will call neither ‘onCompleted’ nor ‘onNext’ after calling ‘onError’
![Page 42: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/42.jpg)
Communication Protocol
● onNext* (onCompleted | onError)? * = zero or more; ? = zero or one● Client may call ‘unsubscribe’ method at any
time, to signal the same to server● Server must check this using ‘subscriber.
isUnsubscribed()’ method and must stop sending further push notifications
![Page 43: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/43.jpg)
Life Cycle of an Observable
● lazily starts emitting items only after subscription
● keeps emitting items till an error is encountered or till the end of stream is reached
● lazily emits another item only after the previous item is consumed
![Page 44: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/44.jpg)
![Page 45: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/45.jpg)
Ex 2 : Client tells the server to stop//client side code
Subscriber<String> mySubscriber = new Subscriber<String>() {
@Override
public void onNext(String s) {
System.out.println(s);
if (s.toUpperCase().contains("BAHU")) {
System.out.println("I got my movie!!!!");
unsubscribe();
}
}
};
![Page 46: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/46.jpg)
Ex 2 : Client tells the server to stop//Server side
Observable<String> myObservable = Observable.create(new
Observable.OnSubscribe<String>() {
@Override
public void call(Subscriber<? super String> sub) {
List<String> list = Arrays.asList("Dhoom 3", "Bahubali",
"Star wars", "Batman");
for (String e : list) {
if (sub.isUnsubscribed()) {
break;
}
sub.onNext(e);
}
sub.onCompleted();
}
});
![Page 47: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/47.jpg)
Ex 3 : Error Handling - Server codefor (String e : list) {
try {
if(e.equalsIgnoreCase("Bahubali 10")){
throw new Exception("Something is wrong!!!");
}
sub.onNext(e);
if (sub.isUnsubscribed()) {
break;
}
sub.onCompleted();
} catch (Exception e1) {
sub.onError(e1); break;
}
}
![Page 48: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/48.jpg)
Ex 3 : Error Handling - Client code@Override
public void onError(Throwable e) {
e.printStackTrace();
}
![Page 49: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/49.jpg)
ManualErrorHandler - Demo
![Page 50: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/50.jpg)
Ex 5: Take only some values - demo//I can process only next 2 orders
Observable<String> myCustomObservable = myObservable.take(2);
myCustomObservable.subscribe(mySubscriber);
![Page 51: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/51.jpg)
Ex 6: Take orders only for some time//I can take orders for another 3 seconds
Observable<String> myCustomObservable = myObservable.take(3, TimeUnit.SECONDS);
myCustomObservable.subscribe(mySubscriber);
![Page 52: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/52.jpg)
Ex 7: Skip some initial values//Skip initial 3 bytes which is a useless header
Observable<String> myCustomObservable =
myObservable.skip(3);
myCustomObservable.subscribe(mySubscriber);
![Page 53: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/53.jpg)
Ex 8: Skip values for some time//Skip the values for initial 3 seconds
//while they are testing microphone
Observable<String> myCustomObservable =
myObservable.skip(3, TimeUnit.SECONDS);
myCustomObservable.subscribe(mySubscriber);
![Page 54: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/54.jpg)
Ex 9: Skip and Take - Composition
myObservable.skip(1)
.take(2)
.subscribe(mySubscriber);
![Page 55: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/55.jpg)
Ex 10: Filter the streammyObservable.skip(1)
.take(2)
.filter(e -> e.toUpperCase().contains("STAR"))
.subscribe(mySubscriber);
![Page 56: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/56.jpg)
SkipTakeFilterDemo
![Page 57: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/57.jpg)
Ex 11: Two Subscribers - DemomyObservable.skip(1)
.take(2)
.filter(e -> e.toUpperCase().contains("STAR"))
.subscribe(mySubscriber1);
myObservable.skip(2)
.take(3)
.filter(e -> e.toUpperCase().contains("GOLD"))
.subscribe(mySubscriber2);
![Page 58: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/58.jpg)
Ex 12: Combinators//Combinators - Combine / Merge 2 observables
Observable.merge(myObservable1, myObservable2)
.subscribe(mySubscriber);
![Page 59: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/59.jpg)
Merge2Observables - Demo
![Page 60: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/60.jpg)
Error Handling
![Page 61: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/61.jpg)
Ex 13: onErrorResumeNext//on error, resume with the next observable
myObservable1.onErrorResumeNext(myObservable2)
.subscribe(mySubscriber);
![Page 62: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/62.jpg)
Ex 13: onErrorResumeNext
![Page 63: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/63.jpg)
Map vs FlatMap
● Both do transformation● Map:
○ maps one item to another item○ returns only one item○ synchronous
● FlatMap:○ maps one item to zero or more items○ returns an Observable stream○ asynchronous
![Page 64: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/64.jpg)
![Page 65: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/65.jpg)
FlatMapmyObservable1.flatMap( s ->
{
String movie1 = s + " 1";
String movie2 = s + " 2";
String movie3 = s + " 3";
return Observable.just(movie1, movie2, movie3);
}
).subscribe(mySubscriber);
![Page 66: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/66.jpg)
Transformations
![Page 67: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/67.jpg)
Group By Transformation
● groupBy○ similar to ‘group by’ clause in SQL○ groups items according to the condition given○ Ex : can group a sequence of numbers based on
odd or even
![Page 68: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/68.jpg)
![Page 69: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/69.jpg)
window - operator
● chunks an Observable into windows of given time frame
● each chunk is emitted as an independent Observable
● Ex : Observable.interval(600, TimeUnit.MILLISECONDS).window(2, TimeUnit.SECONDS)
![Page 70: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/70.jpg)
![Page 71: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/71.jpg)
window - operator - Demo
![Page 72: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/72.jpg)
Connectable Observable
● normal Observable starts emitting items immediately after subscribing to it
● ‘publish()’ is used to get a Connectable one from the normal
● Connectable Observable emits items after calling ‘connect()’ method on it.
● Connectable Observable can be made to wait till any/all Observers are subscribed
![Page 73: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/73.jpg)
Connectable Observable
● Emits items only once for zero or more subscribers
● Subscribers are likely to lose some initial values if they join late
![Page 74: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/74.jpg)
![Page 75: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/75.jpg)
ConnectableObservable - Demo
![Page 76: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/76.jpg)
Climax
![Page 77: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/77.jpg)
Case studies:
![Page 78: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/78.jpg)
Case study 1: DB Access
![Page 79: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/79.jpg)
Case study 2 : FlatMap
![Page 80: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/80.jpg)
Case study 3 : Twitter App Setup
![Page 81: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/81.jpg)
![Page 82: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/82.jpg)
![Page 83: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/83.jpg)
![Page 84: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/84.jpg)
![Page 85: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/85.jpg)
![Page 86: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/86.jpg)
![Page 87: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/87.jpg)
![Page 88: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/88.jpg)
![Page 89: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/89.jpg)
![Page 90: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/90.jpg)
![Page 91: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/91.jpg)
Case study 3 : Twitter App Demo
![Page 92: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/92.jpg)
THE END
![Page 93: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/93.jpg)
Now revisit the teaser & the trailer :)
![Page 94: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/94.jpg)
References
● Google● Wikipedia● SO● RxJava API Docs● http://reactivex.io/documentation/operators.
html
![Page 95: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/95.jpg)
?
![Page 96: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/96.jpg)
Let us stay in touch :Dinesh [email protected] : +91-888-415-9093USA : 001-281-303-5266https://in.linkedin.com/in/dineshbhatt
![Page 97: Java Programming in Reactive · Functional Programming as in Java 8 Streams of Java 8 Lambda expressions ... Asynchronous Ex 1: Do x, y, z after p is done Ex 2: Do p, q after r is](https://reader034.fdocuments.us/reader034/viewer/2022052321/60a161d0451532519f57532d/html5/thumbnails/97.jpg)
Thank you!!!