SlideShare ist ein Scribd-Unternehmen logo
1 von 144
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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 TreesLorenzo 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 185Mahmoud Samir Fayed
 
Palestra collection google
Palestra collection googlePalestra collection google
Palestra collection googleWende 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 DechouxPublicis Sapient Engineering
 
Laboratory activity 3 b3
Laboratory activity 3 b3Laboratory activity 3 b3
Laboratory activity 3 b3Jomel 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 212Mahmoud Samir Fayed
 
Ejemplo radio
Ejemplo radioEjemplo radio
Ejemplo radiolupe ga
 
Scala dsls-dissecting-and-implementing-rogue
Scala dsls-dissecting-and-implementing-rogueScala dsls-dissecting-and-implementing-rogue
Scala dsls-dissecting-and-implementing-rogueKonrad 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 exampleChristopher Curtin
 
多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy Grails多治見IT勉強会 Groovy Grails
多治見IT勉強会 Groovy GrailsTsuyoshi Yamamoto
 
Techtalk Rolling Scopes 2017 neural networks
Techtalk Rolling Scopes 2017 neural networksTechtalk Rolling Scopes 2017 neural networks
Techtalk Rolling Scopes 2017 neural networksVsevolod 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 181Mahmoud Samir Fayed
 
computer notes - Data Structures - 21
computer notes - Data Structures - 21computer notes - Data Structures - 21
computer notes - Data Structures - 21ecomputernotes
 

Was ist angesagt? (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
 

Ähnlich wie 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 TestingC4Media
 
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 2015Leonardo Borges
 
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++.pdfsnewfashion
 
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 APIjagriti 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 entrepriseSOAT
 
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
 
Pragmatic Real-World Scala
Pragmatic Real-World ScalaPragmatic Real-World Scala
Pragmatic Real-World Scalaparag978978
 
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 FrameworkSunil OS
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfpragmaticrealworldscalajfokus2009-1233251076441384-2.pdf
pragmaticrealworldscalajfokus2009-1233251076441384-2.pdfHiroshi Ono
 
Multi dimensional arrays
Multi dimensional arraysMulti dimensional arrays
Multi dimensional arraysAseelhalees
 
An introduction to property-based testing
An introduction to property-based testingAn introduction to property-based testing
An introduction to property-based testingVincent 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 20160116Paulo Morgado
 

Ähnlich wie 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 (short version)
Pragmatic Real-World Scala (short version)Pragmatic Real-World Scala (short version)
Pragmatic Real-World Scala (short version)
 
Pragmatic Real-World Scala
Pragmatic Real-World ScalaPragmatic Real-World Scala
Pragmatic Real-World Scala
 
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
 

Mehr von 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.pdfK. Matthew Dupree
 
Intro To Gradient Descent in Javascript
Intro To Gradient Descent in JavascriptIntro To Gradient Descent in Javascript
Intro To Gradient Descent in JavascriptK. Matthew Dupree
 
Writing testable android apps
Writing testable android appsWriting testable android apps
Writing testable android appsK. Matthew Dupree
 
Functional Testing for React Native Apps
Functional Testing for React Native AppsFunctional Testing for React Native Apps
Functional Testing for React Native AppsK. Matthew Dupree
 

Mehr von 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
 

Kürzlich hochgeladen

Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Orbitshub
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Jeffrey Haguewood
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxRemote DBA Services
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Bhuvaneswari Subramani
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...apidays
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...apidays
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDropbox
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businesspanagenda
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Victor Rentea
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodJuan lago vázquez
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxRustici Software
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesrafiqahmad00786416
 

Kürzlich hochgeladen (20)

Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
Web Form Automation for Bonterra Impact Management (fka Social Solutions Apri...
 
Vector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptxVector Search -An Introduction in Oracle Database 23ai.pptx
Vector Search -An Introduction in Oracle Database 23ai.pptx
 
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​Elevate Developer Efficiency & build GenAI Application with Amazon Q​
Elevate Developer Efficiency & build GenAI Application with Amazon Q​
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
Apidays New York 2024 - Accelerating FinTech Innovation by Vasa Krishnan, Fin...
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
DBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor PresentationDBX First Quarter 2024 Investor Presentation
DBX First Quarter 2024 Investor Presentation
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024Finding Java's Hidden Performance Traps @ DevoxxUK 2024
Finding Java's Hidden Performance Traps @ DevoxxUK 2024
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
ICT role in 21st century education and its challenges
ICT role in 21st century education and its challengesICT role in 21st century education and its challenges
ICT role in 21st century education and its challenges
 

An Introduction to RxJava