SlideShare a Scribd company logo
An Introduction
to RxJava
Matt Dupree
mSearchView.setOnQueryTextListener(

new SearchView.OnQueryTextListener() {

@Override

public boolean onQueryTextSubmit(String s) {

mSearchView.clearFocus();

return true;

}



@Override

public boolean onQueryTextChange(String s) {

searchFor(s);

return true;

}

});
mSearchView.setOnQueryTextListener(

new SearchView.OnQueryTextListener() {

@Override

public boolean onQueryTextSubmit(String s) {

mSearchView.clearFocus();

return true;

}



@Override

public boolean onQueryTextChange(String s) {

searchFor(s);

return true;

}

});
private void searchFor(String query) {

// ANALYTICS EVENT: Start a search on the Search activity

// Contains: Nothing (Event params are constant: Search query 

// not included)

AnalyticsHelper.sendEvent(SCREEN_LABEL, "Search", "");

Bundle args = new Bundle(1);

if (query == null) {

query = "";

}

args.putString(ARG_QUERY, query);

if (TextUtils.equals(query, mQuery)) {

getLoaderManager()

.initLoader(SearchTopicsSessionsQuery.TOKEN, args,

this);

} else {

getLoaderManager()

.restartLoader(SearchTopicsSessionsQuery.TOKEN, args,

this);

}

mQuery = query;

}
private void searchFor(String query) {

// ANALYTICS EVENT: Start a search on the Search activity

// Contains: Nothing (Event params are constant: Search query 

// not included)

AnalyticsHelper.sendEvent(SCREEN_LABEL, "Search", "");

Bundle args = new Bundle(1);

if (query == null) {

query = "";

}

args.putString(ARG_QUERY, query);

if (TextUtils.equals(query, mQuery)) {

getLoaderManager()

.initLoader(SearchTopicsSessionsQuery.TOKEN, args,

this);

} else {

getLoaderManager()

.restartLoader(SearchTopicsSessionsQuery.TOKEN, args,

this);

}

mQuery = query;

}
@Override

public void onLoadFinished(Loader<Cursor> loader, Cursor data) {

mResultsAdapter.swapCursor(data);

mSearchResults.setVisibility(

data.getCount() > 0 ? View.VISIBLE : View.GONE);

}
we’re missing an
abstraction
Observable
declaratively
composable sequence
declaratively
composable sequence
declaratively
composable sequence
Observables in Action
I was pretty much dragged into RxJava by my coworkers...[RxJava]
was a lot like git...when I first learned git, I didn’t really learn it. I just
spent three weeks being mad at it...and then something clicked
and I was like ‘Oh! I get it! And this is amazing and I love it!' The
same thing happened with RxJava.
—Dan Lew, Google Developer Expert
Java’s
Array
Memory
Composition
Rx
Observable
Java’s
Array
Memory
Composition
Rx
Observable
Java’s
Array
Memory
Composition
Rx
Observable
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
???
???
declaratively
composable sequence
declaratively
composable sequence
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
declaratively
composable array
imperatively
composable array
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
Country[] northAmericanCountries = { 

new Country("United States", 300e6),

new Country("Canada", 36e6),

new Country("Mexico", 127e6),

//...

};
double[] getPopulations(Country[] counties) {

double[] populations = new double[counties.length];

for (int i = 0; i < counties.length; i++) {

populations[i] = counties[i].getPopulation();

}

return populations;

}
double[] getPopulations(Country[] counties) {

double[] populations = new double[counties.length];

for (int i = 0; i < counties.length; i++) {

populations[i] = counties[i].getPopulation();

}

return populations;

}
double[] getPopulations(Country[] counties) {

double[] populations = new double[counties.length];

for (int i = 0; i < counties.length; i++) {

populations[i] = counties[i].getPopulation();

}

return populations;

}
double[] getPopulations(Country[] counties) {

double[] populations = new double[counties.length];

for (int i = 0; i < counties.length; i++) {

populations[i] = counties[i].getPopulation();

}

return populations;

}
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
const countries = [
{ name: "United States", population: 300e6 },
{ name: "Canada", population: 36e6 },
{ name: "Mexico", population: 107e6 }
];
const getPopulations
= (countries) => countries.map(it => it.population);
class Array {
map(transform) {
const newList = [];
for (let i = 0; i < this.size; i++) {
newList.push(transform(this[i]));
}
return newList;
}
}
map
map
filter
map
filter
reduce
const northAmericanPopExcludingUs = countries
.filter(it => it.name === "United States")
.map(it => it.population)
.reduce((totalPop, countryPop) => totalPop + countryPop);
const northAmericanPopExcludingUs = countries
.filter(it => it.name === "United States")
.map(it => it.population)
.reduce((totalPop, countryPop) => totalPop + countryPop);
const northAmericanPopExcludingUs = countries
.filter(it => it.name === "United States")
.map(it => it.population)
.reduce((totalPop, countryPop) => totalPop + countryPop);
const northAmericanPopExcludingUs = countries
.filter(it => it.name === "United States")
.map(it => it.population)
.reduce((totalPop, countryPop) => totalPop + countryPop);
const northAmericanPopExcludingUs = countries
.filter(it => it.name === "United States")
.map(it => it.population)
.reduce((totalPop, countryPop) => totalPop + countryPop);
const northAmericanPopExcludingUs = countries
.filter(it => it.name === "United States")
.map(it => it.population)
.reduce((totalPop, countryPop) => totalPop + countryPop);
300e6 + 36e6 + 127e6 + …
declaratively
composable array
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
map
filter
reduce
map
filter
reduce
+ LinkedList
map
filter
reduce
+ LinkedList = 💥
How is the sequence
stored in memory?
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
Array
Array LinkedList
Array LinkedList
Iterable
Country[] northAmericanCountries = { 

new Country("United States", 300e6),

new Country("Canada", 36e6),

new Country("Mexico", 127e6),

//...

};
for (int i = 0; i < northAmericanCountries.length; i++) {

System.out.println(northAmericanCountries[i]);

}
for (int i = 0; i < linkedList.length; i++) {

System.out.println(linkedList[i]);

}
for (final Object object : array) {

System.out.println(object);

}
for (final Object object : linkedList) {

System.out.println(object);

}
for (final Object object : iterable) {

System.out.println(object);

}
How is the sequence
stored in memory?
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
declaratively
composable iterable
fun getPopulations(countries: Iterable<Country>)

= countries.map { it.population }
fun getPopulations(countries: Iterable<Country>)

= countries.map { it.population }
fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {

val destination = ArrayList<R>(collectionSizeOrDefault(10))

for (item in this)

destination.add(transform(item))

return destination

}
fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {

val destination = ArrayList<R>(collectionSizeOrDefault(10))

for (item in this)

destination.add(transform(item))

return destination

}
fun getTotalPopulationExcludingUs(countries: Iterable<Country>)

= countries

.filter { it.name == "United States" }

.map { it.population }

.reduce { total, currentPop -> total + currentPop }
fun getTotalPopulationExcludingUs(countries: Iterable<Country>)

= countries

.filter { it.name == "United States" }

.map { it.population }

.reduce { total, currentPop -> total + currentPop }
fun getTotalPopulationExcludingUs(countries: Iterable<Country>)

= countries

.filter { it.name == "United States" }

.map { it.population }

.reduce { total, currentPop -> total + currentPop }
fun getTotalPopulationExcludingUs(countries: Iterable<Country>)

= countries

.filter { it.name == "United States" }

.map { it.population }

.reduce { total, currentPop -> total + currentPop }
300e6 + 36e6 + 127e6 + …
declaratively
composable iterable
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
Java’s
Array
Java’s
Iterable
Memory
Composition
Kotlin’s
Iterable;
Java 8
Streams
Rx
Observable
Javascript’s
Array
declaratively
composable sequence
declaratively
composable sequence
button.setOnClickListener(new View.OnClickListener() {

@Override public void onClick(View v) {

trackClick();

}

});
for (int buttonClick : buttonClicks) {

trackClick();

}
button.setOnClickListener(new View.OnClickListener() {

@Override public void onClick(View v) {

trackClick();

}

});
for (int buttonClick : buttonClicks) {

trackClick();

}
button.forEachClick(new View.OnClickListener() {

@Override public void onClick(View v) {

trackClick();

}

});
for (int buttonClick : buttonClicks) {

trackClick();

}
clickSequence.forEachClick(new View.OnClickListener() {

@Override public void onClick(View v) {

trackClick();

}

});
clickSequence.forEachClick(new View.OnClickListener() {

@Override public void onClick(View v) {

trackClick();

}

});
clickObservable.subscribe(new Consumer<View> {

@Override public void accept(View v) {

trackClick();

}

});
declaratively
composable sequence
declaratively
composable sequence
declaratively composable
iterable
map
filter
reduce
map
filter
reduce
+ LinkedList
map
filter
reduce
+ LinkedList = 💥
How is the sequence
stored in memory?
Iterable
How is the sequence
stored in memory?
map
filter
reduce
map
filter
reduce
+ Async
map
filter
reduce
+ Async = 💥
Is the sequence
currently in memory?
Observable
Is the sequence
currently in memory?
Array
Array LinkedList
Array LinkedList
Iterable
Array LinkedList
Iterable
…
Array LinkedList
Iterable
…
Array LinkedList
Iterable
…
Sequence
Array LinkedList
Iterable
…
Sequence
Array LinkedList
Iterable
…
Observable
declaratively
composable sequence
[k, ke, key, keyn, keyno, keynot, keynote]
[results for ‘k’, results for ‘ke', results for ‘key’…]
for each result, update UI
makeQueryTextObservable(mSearchView)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
[k, ke, key, keyn, keyno, keynot, keynote]
makeQueryTextObservable(mSearchView)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
[results for ‘k’, results for ‘ke', results for ‘key’…]
makeQueryTextObservable(mSearchView)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView)
.filter { s -> s.length > 3 }

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView)
.filter { s -> s.length > 3 }

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
[k, ke, key, keyn, keyno, keynot, keynote]
filter
[keyn, keyno, keynot, keynote]
makeQueryTextObservable(mSearchView)
.filter { s -> s.length > 3 }

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView!!)

.filter { s -> s.length > 3 }

.debounce(300, TimeUnit.MILLISECONDS)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter!!.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView!!)

.filter { s -> s.length > 3 }

.debounce(300, TimeUnit.MILLISECONDS)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter!!.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView!!)

.filter { s -> s.length > 3 }

.debounce(300, TimeUnit.MILLISECONDS)

.flatMap { s -> makeLoadObservable(s) }

.subscribe { cursor ->

mResultsAdapter!!.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView!!)

.filter { s -> s.length > 3 }

.debounce(300, TimeUnit.MILLISECONDS)

.flatMap { s -> makeLoadObservable(s) }

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe { cursor ->

mResultsAdapter!!.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView!!)

.filter { s -> s.length > 3 }

.debounce(300, TimeUnit.MILLISECONDS)

.flatMap { s -> makeLoadObservable(s) }

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe { cursor ->

mResultsAdapter!!.swapCursor(cursor)

}
makeQueryTextObservable(mSearchView!!)

.filter { s -> s.length > 3 }

.debounce(300, TimeUnit.MILLISECONDS)

.flatMap { s -> makeLoadObservable(s) }

.subscribeOn(Schedulers.io())

.observeOn(AndroidSchedulers.mainThread())

.subscribe { cursor ->

mResultsAdapter!!.swapCursor(cursor)

}
declaratively
composable sequence
An Introduction to
RxJava
https://twitter.com/philosohacker
https://twitter.com/unikeytech

More Related Content

What's hot

Time Series Analysis by JavaScript LL matsuri 2013
Time Series Analysis by JavaScript LL matsuri 2013 Time Series Analysis by JavaScript LL matsuri 2013
Time Series Analysis by JavaScript LL matsuri 2013
Daichi Morifuji
 
Modern Algorithms and Data Structures - 1. Bloom Filters, Merkle Trees
Modern Algorithms and Data Structures - 1. Bloom Filters, Merkle TreesModern Algorithms and Data Structures - 1. Bloom Filters, Merkle Trees
Modern Algorithms and Data Structures - 1. Bloom Filters, Merkle Trees
Lorenzo Alberton
 
The Ring programming language version 1.5.4 book - Part 68 of 185
The Ring programming language version 1.5.4 book - Part 68 of 185The Ring programming language version 1.5.4 book - Part 68 of 185
The Ring programming language version 1.5.4 book - Part 68 of 185
Mahmoud Samir Fayed
 
Palestra collection google
Palestra collection googlePalestra collection google
Palestra collection google
Wende Mendes
 
Rのスコープとフレームと環境と
Rのスコープとフレームと環境とRのスコープとフレームと環境と
Rのスコープとフレームと環境と
Takeshi Arabiki
 
Open XKE - Big Data, Big Mess par Bertrand Dechoux
Open XKE - Big Data, Big Mess par Bertrand DechouxOpen XKE - Big Data, Big Mess par Bertrand Dechoux
Open XKE - Big Data, Big Mess par Bertrand Dechoux
Publicis Sapient Engineering
 
Laboratory activity 3 b3
Laboratory activity 3 b3Laboratory activity 3 b3
Laboratory activity 3 b3
Jomel Penalba
 
Rデバッグあれこれ
RデバッグあれこれRデバッグあれこれ
Rデバッグあれこれ
Takeshi Arabiki
 
The Ring programming language version 1.10 book - Part 80 of 212
The Ring programming language version 1.10 book - Part 80 of 212The Ring programming language version 1.10 book - Part 80 of 212
The Ring programming language version 1.10 book - Part 80 of 212
Mahmoud Samir Fayed
 
Ejemplo radio
Ejemplo radioEjemplo radio
Ejemplo radio
lupe ga
 
Tricks
TricksTricks
Tricks
MongoDB
 
Scala dsls-dissecting-and-implementing-rogue
Scala dsls-dissecting-and-implementing-rogueScala dsls-dissecting-and-implementing-rogue
Scala dsls-dissecting-and-implementing-rogue
Konrad Malawski
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용
I Goo Lee
 
AJUG April 2011 Raw hadoop example
AJUG April 2011 Raw hadoop exampleAJUG April 2011 Raw hadoop example
AJUG April 2011 Raw hadoop example
Christopher Curtin
 
多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails
Tsuyoshi Yamamoto
 
Techtalk Rolling Scopes 2017 neural networks
Techtalk Rolling Scopes 2017 neural networksTechtalk Rolling Scopes 2017 neural networks
Techtalk Rolling Scopes 2017 neural networks
Vsevolod Rodionov
 
The Ring programming language version 1.5.2 book - Part 76 of 181
The Ring programming language version 1.5.2 book - Part 76 of 181The Ring programming language version 1.5.2 book - Part 76 of 181
The Ring programming language version 1.5.2 book - Part 76 of 181
Mahmoud Samir Fayed
 
mobl
moblmobl
computer notes - Data Structures - 21
computer notes - Data Structures - 21computer notes - Data Structures - 21
computer notes - Data Structures - 21
ecomputernotes
 

What's hot (19)

Time Series Analysis by JavaScript LL matsuri 2013
Time Series Analysis by JavaScript LL matsuri 2013 Time Series Analysis by JavaScript LL matsuri 2013
Time Series Analysis by JavaScript LL matsuri 2013
 
Modern Algorithms and Data Structures - 1. Bloom Filters, Merkle Trees
Modern Algorithms and Data Structures - 1. Bloom Filters, Merkle TreesModern Algorithms and Data Structures - 1. Bloom Filters, Merkle Trees
Modern Algorithms and Data Structures - 1. Bloom Filters, Merkle Trees
 
The Ring programming language version 1.5.4 book - Part 68 of 185
The Ring programming language version 1.5.4 book - Part 68 of 185The Ring programming language version 1.5.4 book - Part 68 of 185
The Ring programming language version 1.5.4 book - Part 68 of 185
 
Palestra collection google
Palestra collection googlePalestra collection google
Palestra collection google
 
Rのスコープとフレームと環境と
Rのスコープとフレームと環境とRのスコープとフレームと環境と
Rのスコープとフレームと環境と
 
Open XKE - Big Data, Big Mess par Bertrand Dechoux
Open XKE - Big Data, Big Mess par Bertrand DechouxOpen XKE - Big Data, Big Mess par Bertrand Dechoux
Open XKE - Big Data, Big Mess par Bertrand Dechoux
 
Laboratory activity 3 b3
Laboratory activity 3 b3Laboratory activity 3 b3
Laboratory activity 3 b3
 
Rデバッグあれこれ
RデバッグあれこれRデバッグあれこれ
Rデバッグあれこれ
 
The Ring programming language version 1.10 book - Part 80 of 212
The Ring programming language version 1.10 book - Part 80 of 212The Ring programming language version 1.10 book - Part 80 of 212
The Ring programming language version 1.10 book - Part 80 of 212
 
Ejemplo radio
Ejemplo radioEjemplo radio
Ejemplo radio
 
Tricks
TricksTricks
Tricks
 
Scala dsls-dissecting-and-implementing-rogue
Scala dsls-dissecting-and-implementing-rogueScala dsls-dissecting-and-implementing-rogue
Scala dsls-dissecting-and-implementing-rogue
 
MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용MySQL 5.7 NF – JSON Datatype 활용
MySQL 5.7 NF – JSON Datatype 활용
 
AJUG April 2011 Raw hadoop example
AJUG April 2011 Raw hadoop exampleAJUG April 2011 Raw hadoop example
AJUG April 2011 Raw hadoop example
 
多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails
 
Techtalk Rolling Scopes 2017 neural networks
Techtalk Rolling Scopes 2017 neural networksTechtalk Rolling Scopes 2017 neural networks
Techtalk Rolling Scopes 2017 neural networks
 
The Ring programming language version 1.5.2 book - Part 76 of 181
The Ring programming language version 1.5.2 book - Part 76 of 181The Ring programming language version 1.5.2 book - Part 76 of 181
The Ring programming language version 1.5.2 book - Part 76 of 181
 
mobl
moblmobl
mobl
 
computer notes - Data Structures - 21
computer notes - Data Structures - 21computer notes - Data Structures - 21
computer notes - Data Structures - 21
 

Similar to An Introduction to RxJava

An Introduction to Property Based Testing
An Introduction to Property Based TestingAn Introduction to Property Based Testing
An Introduction to Property Based Testing
C4Media
 
Futures e abstração - QCon São Paulo 2015
Futures e abstração - QCon São Paulo 2015Futures e abstração - QCon São Paulo 2015
Futures e abstração - QCon São Paulo 2015
Leonardo Borges
 
Java 8 Examples
Java 8 ExamplesJava 8 Examples
Java 8 Examples
Scott Taylor
 
Solve the coding errors for upvotemake test-statsg++ -g -std=c++.pdf
Solve the coding errors for upvotemake test-statsg++ -g -std=c++.pdfSolve the coding errors for upvotemake test-statsg++ -g -std=c++.pdf
Solve the coding errors for upvotemake test-statsg++ -g -std=c++.pdf
snewfashion
 
Basic java, java collection Framework and Date Time API
Basic java, java collection Framework and Date Time APIBasic java, java collection Framework and Date Time API
Basic java, java collection Framework and Date Time API
jagriti srivastava
 
JAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseJAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entreprise
SOAT
 
Developer Testing Tools Roundup
Developer Testing Tools RoundupDeveloper Testing Tools Roundup
Developer Testing Tools Roundup
John Ferguson Smart Limited
 
Collection Core Concept
Collection Core ConceptCollection Core Concept
Collection Core Concept
Rays Technologies
 
Pragmatic Real-World Scala
Pragmatic Real-World ScalaPragmatic Real-World Scala
Pragmatic Real-World Scala
parag978978
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
Jonas Bonér
 
collections
collectionscollections
collections
javeed_mhd
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)
Stephen Chin
 
Collections Framework
Collections FrameworkCollections Framework
Collections Framework
Sunil OS
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
Hiroshi Ono
 
Multi dimensional arrays
Multi dimensional arraysMulti dimensional arrays
Multi dimensional arrays
Aseelhalees
 
An introduction to property-based testing
An introduction to property-based testingAn introduction to property-based testing
An introduction to property-based testing
Vincent Pradeilles
 
What's new in C# 6 - NetPonto Porto 20160116
What's new in C# 6  - NetPonto Porto 20160116What's new in C# 6  - NetPonto Porto 20160116
What's new in C# 6 - NetPonto Porto 20160116
Paulo Morgado
 

Similar to An Introduction to RxJava (20)

An Introduction to Property Based Testing
An Introduction to Property Based TestingAn Introduction to Property Based Testing
An Introduction to Property Based Testing
 
Futures e abstração - QCon São Paulo 2015
Futures e abstração - QCon São Paulo 2015Futures e abstração - QCon São Paulo 2015
Futures e abstração - QCon São Paulo 2015
 
Java 8 Examples
Java 8 ExamplesJava 8 Examples
Java 8 Examples
 
Solve the coding errors for upvotemake test-statsg++ -g -std=c++.pdf
Solve the coding errors for upvotemake test-statsg++ -g -std=c++.pdfSolve the coding errors for upvotemake test-statsg++ -g -std=c++.pdf
Solve the coding errors for upvotemake test-statsg++ -g -std=c++.pdf
 
Basic java, java collection Framework and Date Time API
Basic java, java collection Framework and Date Time APIBasic java, java collection Framework and Date Time API
Basic java, java collection Framework and Date Time API
 
JAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entrepriseJAVA 8 : Migration et enjeux stratégiques en entreprise
JAVA 8 : Migration et enjeux stratégiques en entreprise
 
Developer Testing Tools Roundup
Developer Testing Tools RoundupDeveloper Testing Tools Roundup
Developer Testing Tools Roundup
 
Collection Core Concept
Collection Core ConceptCollection Core Concept
Collection Core Concept
 
Pragmatic Real-World Scala
Pragmatic Real-World ScalaPragmatic Real-World Scala
Pragmatic Real-World Scala
 
Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
collections
collectionscollections
collections
 
Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)Mary Had a Little λ (QCon)
Mary Had a Little λ (QCon)
 
Collections Framework
Collections FrameworkCollections Framework
Collections Framework
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
 
Multi dimensional arrays
Multi dimensional arraysMulti dimensional arrays
Multi dimensional arrays
 
An introduction to property-based testing
An introduction to property-based testingAn introduction to property-based testing
An introduction to property-based testing
 
What's new in C# 6 - NetPonto Porto 20160116
What's new in C# 6  - NetPonto Porto 20160116What's new in C# 6  - NetPonto Porto 20160116
What's new in C# 6 - NetPonto Porto 20160116
 

More from K. Matthew Dupree

intro-to-metaprogramming-in-r.pdf
intro-to-metaprogramming-in-r.pdfintro-to-metaprogramming-in-r.pdf
intro-to-metaprogramming-in-r.pdf
K. Matthew Dupree
 
Intro To Gradient Descent in Javascript
Intro To Gradient Descent in JavascriptIntro To Gradient Descent in Javascript
Intro To Gradient Descent in Javascript
K. Matthew Dupree
 
Dagger 2, 2 years later
Dagger 2, 2 years laterDagger 2, 2 years later
Dagger 2, 2 years later
K. Matthew Dupree
 
If Android Tests Could Talk
If Android Tests Could TalkIf Android Tests Could Talk
If Android Tests Could Talk
K. Matthew Dupree
 
Writing testable android apps
Writing testable android appsWriting testable android apps
Writing testable android apps
K. Matthew Dupree
 
Di and Dagger
Di and DaggerDi and Dagger
Di and Dagger
K. Matthew Dupree
 
Functional Testing for React Native Apps
Functional Testing for React Native AppsFunctional Testing for React Native Apps
Functional Testing for React Native Apps
K. Matthew Dupree
 
Testable android apps
Testable android appsTestable android apps
Testable android apps
K. Matthew Dupree
 

More from K. Matthew Dupree (8)

intro-to-metaprogramming-in-r.pdf
intro-to-metaprogramming-in-r.pdfintro-to-metaprogramming-in-r.pdf
intro-to-metaprogramming-in-r.pdf
 
Intro To Gradient Descent in Javascript
Intro To Gradient Descent in JavascriptIntro To Gradient Descent in Javascript
Intro To Gradient Descent in Javascript
 
Dagger 2, 2 years later
Dagger 2, 2 years laterDagger 2, 2 years later
Dagger 2, 2 years later
 
If Android Tests Could Talk
If Android Tests Could TalkIf Android Tests Could Talk
If Android Tests Could Talk
 
Writing testable android apps
Writing testable android appsWriting testable android apps
Writing testable android apps
 
Di and Dagger
Di and DaggerDi and Dagger
Di and Dagger
 
Functional Testing for React Native Apps
Functional Testing for React Native AppsFunctional Testing for React Native Apps
Functional Testing for React Native Apps
 
Testable android apps
Testable android appsTestable android apps
Testable android apps
 

Recently uploaded

TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
TrustArc
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
Mariano Tinti
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
Quotidiano Piemontese
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Speck&Tech
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
Adtran
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
Matthew Sinclair
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems S.M.S.A.
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
Tomaz Bratanic
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
mikeeftimakis1
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
SOFTTECHHUB
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
Matthew Sinclair
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
DianaGray10
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
名前 です男
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
Neo4j
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
DianaGray10
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
Edge AI and Vision Alliance
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
Neo4j
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
DianaGray10
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
Matthew Sinclair
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Malak Abu Hammad
 

Recently uploaded (20)

TrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy SurveyTrustArc Webinar - 2024 Global Privacy Survey
TrustArc Webinar - 2024 Global Privacy Survey
 
Mariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceXMariano G Tinti - Decoding SpaceX
Mariano G Tinti - Decoding SpaceX
 
National Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practicesNational Security Agency - NSA mobile device best practices
National Security Agency - NSA mobile device best practices
 
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
Cosa hanno in comune un mattoncino Lego e la backdoor XZ?
 
Pushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 daysPushing the limits of ePRTC: 100ns holdover for 100 days
Pushing the limits of ePRTC: 100ns holdover for 100 days
 
20240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 202420240605 QFM017 Machine Intelligence Reading List May 2024
20240605 QFM017 Machine Intelligence Reading List May 2024
 
Uni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdfUni Systems Copilot event_05062024_C.Vlachos.pdf
Uni Systems Copilot event_05062024_C.Vlachos.pdf
 
GraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracyGraphRAG for Life Science to increase LLM accuracy
GraphRAG for Life Science to increase LLM accuracy
 
Introduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - CybersecurityIntroduction to CHERI technology - Cybersecurity
Introduction to CHERI technology - Cybersecurity
 
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
Why You Should Replace Windows 11 with Nitrux Linux 3.5.0 for enhanced perfor...
 
20240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 202420240607 QFM018 Elixir Reading List May 2024
20240607 QFM018 Elixir Reading List May 2024
 
UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5UiPath Test Automation using UiPath Test Suite series, part 5
UiPath Test Automation using UiPath Test Suite series, part 5
 
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
みなさんこんにちはこれ何文字まで入るの?40文字以下不可とか本当に意味わからないけどこれ限界文字数書いてないからマジでやばい文字数いけるんじゃないの?えこ...
 
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
GraphSummit Singapore | Enhancing Changi Airport Group's Passenger Experience...
 
UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6UiPath Test Automation using UiPath Test Suite series, part 6
UiPath Test Automation using UiPath Test Suite series, part 6
 
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
“Building and Scaling AI Applications with the Nx AI Manager,” a Presentation...
 
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
GraphSummit Singapore | Graphing Success: Revolutionising Organisational Stru...
 
Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1Communications Mining Series - Zero to Hero - Session 1
Communications Mining Series - Zero to Hero - Session 1
 
20240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 202420240609 QFM020 Irresponsible AI Reading List May 2024
20240609 QFM020 Irresponsible AI Reading List May 2024
 
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdfUnlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
Unlock the Future of Search with MongoDB Atlas_ Vector Search Unleashed.pdf
 

An Introduction to RxJava