SlideShare a Scribd company logo
1 of 71
Download to read offline
11
The ABCs of
RxJava
Florina Muntenescu
@FMuntenescu
22
The ABCs of
RxJava
Making a Burger
Florina Muntenescu
@FMuntenescu
3
Donald Duck’s
Burger Joint
4
Huey Dewey Louie
5
Huey
6
Dewey
7
Louie
8
Huey
Dewey
Louie
9
filter(meat -> isMeatFresh(meat))
map(meat -> cook(meat))
Dewey
10
zip
11
zip
12
zip
13
zip
14
STREAMS	OF	DATA
15
STREAMS	OF	DATA
16
STREAMS	OF	DATA
17
zip
STREAMS	OF	DATA
18
Consumer
Observable
Subscriber
19
filter(meat -> isMeatFresh(meat))
map(meat -> cook(meat))
operators
20
Huey.getBun()
21
filter(meat -> isMeatFresh(meat))
for(Meat meat: meatList){
if(!isMeatFresh(meat)){
meatList.remove(meat);
}
}
22
Observable.from(meatSource)
.filter(meat ->
isMeatFresh(meat))
filter(meat -> isMeatFresh(meat))
23
filter(meat -> isMeatFresh(meat))
map(meat -> cook(meat))
for(Meat meat: meatList){
meat = cook(meat);
}
24
Observable.from(meatSource)
.filter(meat ->
isMeatGoneBad(meat))
.map(meat -> cook(meat));
filter(meat -> isMeatFresh(meat))
map(meat -> cook(meat))
25
Observable<Burger> burgerObservable =
Observable.zip(bunObservable,
meatObservable,
tomatoObservable,
(bun, meat, tomato) ->
makeBurger(bun, meat, tomato))
bunObservable
meatObservable
tomatoObservable
burgerObservable
26
Observable<Burger> burgerObservable =
Observable.zip(bunObservable,
meatObservable,
tomatoObservable,
(bun, meat, tomato) ->
makeBurger(bun, meat, tomato))
bunObservable
meatObservable
tomatoObservable
burgerObservable
27
Consumer
Observable
Subscriber
.subscribe
28
Subscriber
burgerObservable
.subscribe(mickeySubscriber);
29
Subscriber
onNext(Burger burger)
onCompleted()
burgerObservable
.subscribe(
burger -> eatBurger(burger),
error -> complain(error),
() -> leaveBurgerJoint());
//	onNext
//onError
//onCompleted
onError(Throwable error)
30
Observable.zip(bunObservable,
meatObservable,
tomatoObservable,
(bun, meat, tomato) ->
makeBurger(bun, meat, tomato))
.subscribe(burger -> eatBurger(burger),
error -> complain(error)); //	dining	area
//	dining	area
31
//	kitchen
//	dining	area
Observable.zip(bunObservable,
meatObservable,
tomatoObservable,
(bun, meat, tomato) ->
makeBurger(bun, meat, tomato))
.subscribe(burger -> eatBurger(burger),
error -> complain(error));
32
//	kitchen
//	dining	area
Observable.zip(bunObservable,
meatObservable,
tomatoObservable,
(bun, meat, tomato) ->
makeBurger(bun, meat, tomato))
.subscribeOn(kitchen)
.observeOn(dining area)
.subscribe(burger -> eatBurger(burger),
error -> complain(error));
33
Observable.zip(bunObservable,
meatObservable,
tomatoObservable,
(bun, meat, tomato) ->
makeBurger(bun, meat, tomato))
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.subscribe(burger -> eatBurger(burger),
error -> complain(error));//	dining	area
//	kitchen
34
Stream	of	data
Observable
Subscriber
Operators
Threads
35
Creating Observables
36
Creating Observables
From a List
37
List<Burger> burgers = new ArrayList<>();
burgers.add(new Burger());
burgers.add(new Burger());
Observable<Burger> burgerObservable =
Observable.from(burgers);
38
List<Burger> burgers = new ArrayList<>();
burgers.add(new Burger());
burgers.add(new Burger());
Observable<Burger> burgerObservable =
Observable.from(burgers);
1 2
39
Observable<Burger> burgerObservable =
Observable.from(burgers);
burgerObservable.subscribe(new Subscriber<Burger>() {
@Override
public void onNext(final Burger burger) {
}
@Override
public void onCompleted() {
}
@Override
public void onError(final Throwable e) {
}
});
40
Observable<Burger> burgerObservable = Observable.from(burgers);
burgerObservable.subscribe(new Subscriber<Burger>() {
@Override
public void onNext(final Burger burger) {
// handle burger 1
}
@Override
public void onCompleted() {
}
@Override
public void onError(final Throwable e) {
}
});
1
41
Observable<Burger> burgerObservable = Observable.from(burgers);
burgerObservable.subscribe(new Subscriber<Burger>() {
@Override
public void onNext(final Burger burger) {
// handle burger 2
}
@Override
public void onCompleted() {
}
@Override
public void onError(final Throwable e) {
}
});
1 2
42
Observable<Burger> burgerObservable = Observable.from(burgers);
burgerObservable.subscribe(new Subscriber<Burger>() {
@Override
public void onNext(final Burger burger) {
}
@Override
public void onCompleted() {
// no more burgers!
}
@Override
public void onError(final Throwable e) {
}
});
1 2
43
Observable<List<Burger>>
List<Burger> burgers = new ArrayList<>();
burgers.add(new Burger());
burgers.add(new Burger());
burgerObservable =
Observable.just(burgers);
44
1
Observable<List<Burger>>
burgerObservable =
Observable.just(burgers);
List<Burger> burgers = new ArrayList<>();
burgers.add(new Burger());
burgers.add(new Burger());
45
Observable<List<Burger>> burgerObservable =
Observable.just(burgers);
burgerObservable.subscribe(
new Subscriber<List<Burger>>() {
@Override
public void onNext(final List<Burger> burgers) {
}
@Override
public void onCompleted() {
}
@Override
public void onError(final Throwable e) {
}
});
46
Observable<List<Burger>> burgerObservable =
Observable.just(burgers);
burgerObservable.subscribe(
new Subscriber<List<Burger>>() {
@Override
public void onNext(
final List<Burger> burgers) {
// handle the list of burgers
}
@Override
public void onCompleted() {
}
@Override
public void onError(final Throwable e) {
}
});
1
47
Observable<List<Burger>> burgerObservable =
Observable.just(burgers);
burgerObservable.subscribe(
new Subscriber<List<Burger>>() {
@Override
public void onNext(
final List<Burger> burgers) {
// handle the list of burgers
}
@Override
public void onCompleted() {
// no more burgers!
}
@Override
public void onError(final Throwable e) {
}
});
1
48
Creating Observables
From
Click Events
49
50
51
52
[click!] [click!] [click!]
53
???.subscribe(new Subscriber<String>() {
@Override
public void onNext(final String s) {
// called on every click
}
@Override
public void onCompleted() {
}
@Override
public void onError(final Throwable e) {
}
});
54
[click!] [click!] [click!]
???.onNext(…) ???.onNext(…) ???.onNext(…)
55
burgerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
}
});
PublishSubject<String> burgerRequestedSubject =
PublishSubject.create();
56
burgerButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(final View view) {
burgerRequestedSubject.onNext(…);
}
});
PublishSubject<String> burgerRequestedSubject =
PublishSubject.create();
57
burgerRequestedSubject.subscribe(new Subscriber<String>() {
@Override
public void onNext(final String s) {
// called on every click
}
@Override
public void onCompleted() {
// will never be called for click events
}
@Override
public void onError(final Throwable e) {
}
});
58
Creating Observables
From
Declarative
Code
59
public Burger cook(){
// cooking is time consuming
return burger;
}
Observable<Burger>	burgerObservable =	
Observable.fromCallable(this::cook);
60
Error
Handling
61
Thread t = new Thread(new Runnable() {
@Override
public void run() {
cook();
}
});
62
Thread t = new Thread(new Runnable() {
@Override
public void run() {
try{
cook();
} catch(Exception e) {
// handle exception
}
}
});
63
getMeatObservable()
.filter(meat -> isMeatFresh(meat))
.map(meat -> cook(meat))
.subscribeOn(
meat -> doSomething(),
error -> complain(error));
64
getMeatObservable()
.filter(meat -> isMeatFresh(meat))
.map(meat -> cook(meat))
.subscribeOn(
meat -> doSomething(),
error -> complain(error));
65
public Observable<Meat> getCookedMeat() {
return getMeatObservable()
.filter(meat -> isMeatFresh(meat))
.map(meat -> cook(meat));
}
Observable.zip(getBun(),
getCookedMeat(),
getTomatoSlice(),
(bun, meat, tomato) ->
makeBurger(bun, meat, tomato))
.subscribeOn(
burger -> eatBurger(burger),
error -> complain(error));
66
public Observable<Meat> getCookedMeat() {
return getMeatObservable()
.filter(meat -> isMeatFresh(meat))
.map(meat -> cook(meat));
}
Observable.zip(getBun(),
getCookedMeat(),
getTomatoSlice(),
(bun, meat, tomato) ->
makeBurger(bun, meat, tomato))
.subscribeOn(
burger -> eatBurger(burger),
error -> complain(error));
67
Start using
RxJava
68
public Burger cook(){
// cooking is time consuming
// make sure it’s on a background thread
return burger;
}
Observable<Burger> burgerObservable =
Observable.fromCallable(this::cook)
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
69
@GET(“repos”)
Call<List<Burger>> repoBurgers();
@GET(“repos”)
Observable<List<Burger>> repoBurgers();
70
7171
The ABCs of
RxJava
@FMuntenescu
jobs@upday.com
Building a Reactive Mindset
https://upday.github.io/blog/reactive_mindset_burgers
Reactive Burgers – Code Example
https://github.com/florina-muntenescu/ReactiveBurgers

More Related Content

Recently uploaded

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
9953056974 Low Rate Call Girls In Saket, Delhi NCR
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
mohitmore19
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
VictorSzoltysek
 

Recently uploaded (20)

CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICECHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
CHEAP Call Girls in Pushp Vihar (-DELHI )🔝 9953056974🔝(=)/CALL GIRLS SERVICE
 
10 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 202410 Trends Likely to Shape Enterprise Technology in 2024
10 Trends Likely to Shape Enterprise Technology in 2024
 
Right Money Management App For Your Financial Goals
Right Money Management App For Your Financial GoalsRight Money Management App For Your Financial Goals
Right Money Management App For Your Financial Goals
 
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdfLearn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
Learn the Fundamentals of XCUITest Framework_ A Beginner's Guide.pdf
 
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdfThe Ultimate Test Automation Guide_ Best Practices and Tips.pdf
The Ultimate Test Automation Guide_ Best Practices and Tips.pdf
 
VTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learnVTU technical seminar 8Th Sem on Scikit-learn
VTU technical seminar 8Th Sem on Scikit-learn
 
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
Shapes for Sharing between Graph Data Spaces - and Epistemic Querying of RDF-...
 
AI & Machine Learning Presentation Template
AI & Machine Learning Presentation TemplateAI & Machine Learning Presentation Template
AI & Machine Learning Presentation Template
 
TECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service providerTECUNIQUE: Success Stories: IT Service provider
TECUNIQUE: Success Stories: IT Service provider
 
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
Direct Style Effect Systems -The Print[A] Example- A Comprehension AidDirect Style Effect Systems -The Print[A] Example- A Comprehension Aid
Direct Style Effect Systems - The Print[A] Example - A Comprehension Aid
 
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM TechniquesAI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
AI Mastery 201: Elevating Your Workflow with Advanced LLM Techniques
 
Software Quality Assurance Interview Questions
Software Quality Assurance Interview QuestionsSoftware Quality Assurance Interview Questions
Software Quality Assurance Interview Questions
 
A Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docxA Secure and Reliable Document Management System is Essential.docx
A Secure and Reliable Document Management System is Essential.docx
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Optimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTVOptimizing AI for immediate response in Smart CCTV
Optimizing AI for immediate response in Smart CCTV
 
Unlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language ModelsUnlocking the Future of AI Agents with Large Language Models
Unlocking the Future of AI Agents with Large Language Models
 
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) SolutionIntroducing Microsoft’s new Enterprise Work Management (EWM) Solution
Introducing Microsoft’s new Enterprise Work Management (EWM) Solution
 
Diamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with PrecisionDiamond Application Development Crafting Solutions with Precision
Diamond Application Development Crafting Solutions with Precision
 
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
call girls in Vaishali (Ghaziabad) 🔝 >༒8448380779 🔝 genuine Escort Service 🔝✔️✔️
 
Define the academic and professional writing..pdf
Define the academic and professional writing..pdfDefine the academic and professional writing..pdf
Define the academic and professional writing..pdf
 

Featured

How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
ThinkNow
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
Kurio // The Social Media Age(ncy)
 

Featured (20)

2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot2024 State of Marketing Report – by Hubspot
2024 State of Marketing Report – by Hubspot
 
Everything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPTEverything You Need To Know About ChatGPT
Everything You Need To Know About ChatGPT
 
Product Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage EngineeringsProduct Design Trends in 2024 | Teenage Engineerings
Product Design Trends in 2024 | Teenage Engineerings
 
How Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental HealthHow Race, Age and Gender Shape Attitudes Towards Mental Health
How Race, Age and Gender Shape Attitudes Towards Mental Health
 
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdfAI Trends in Creative Operations 2024 by Artwork Flow.pdf
AI Trends in Creative Operations 2024 by Artwork Flow.pdf
 
Skeleton Culture Code
Skeleton Culture CodeSkeleton Culture Code
Skeleton Culture Code
 
PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024PEPSICO Presentation to CAGNY Conference Feb 2024
PEPSICO Presentation to CAGNY Conference Feb 2024
 
Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)Content Methodology: A Best Practices Report (Webinar)
Content Methodology: A Best Practices Report (Webinar)
 
How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024How to Prepare For a Successful Job Search for 2024
How to Prepare For a Successful Job Search for 2024
 
Social Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie InsightsSocial Media Marketing Trends 2024 // The Global Indie Insights
Social Media Marketing Trends 2024 // The Global Indie Insights
 
Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024Trends In Paid Search: Navigating The Digital Landscape In 2024
Trends In Paid Search: Navigating The Digital Landscape In 2024
 
5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary5 Public speaking tips from TED - Visualized summary
5 Public speaking tips from TED - Visualized summary
 
ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd ChatGPT and the Future of Work - Clark Boyd
ChatGPT and the Future of Work - Clark Boyd
 
Getting into the tech field. what next
Getting into the tech field. what next Getting into the tech field. what next
Getting into the tech field. what next
 
Google's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search IntentGoogle's Just Not That Into You: Understanding Core Updates & Search Intent
Google's Just Not That Into You: Understanding Core Updates & Search Intent
 
How to have difficult conversations
How to have difficult conversations How to have difficult conversations
How to have difficult conversations
 
Introduction to Data Science
Introduction to Data ScienceIntroduction to Data Science
Introduction to Data Science
 
Time Management & Productivity - Best Practices
Time Management & Productivity -  Best PracticesTime Management & Productivity -  Best Practices
Time Management & Productivity - Best Practices
 
The six step guide to practical project management
The six step guide to practical project managementThe six step guide to practical project management
The six step guide to practical project management
 
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
Beginners Guide to TikTok for Search - Rachel Pearson - We are Tilt __ Bright...
 

The ABCs of RxJava