$30 off During Our Annual Pro Sale. View Details »

RxJava - Getting Started

Brice Dutheil
September 09, 2014

RxJava - Getting Started

Nowadays applications are getting increasingly interconnected. Web Oriented Architecture or Micro-Service Architecture for example show there's a growing trend that integrating multiple different web services at different scale.

How to compose or aggregate all of these interactions in a usable result ; but especially how to implement it in a meaningful and readable code, with loose coupling and without temporal coupling ?

RxJava offers an elegant way to write synchronous and asynchronous code with enhanced composition capabilities. In this lightning talk we will present basic concepts of Rx (Reactive eXtensions).

David Wursteisen - Brice Dutheil / Human Talks Paris / September 9th 2014
Video of this presentation is on parleys in French :
https://www.parleys.com/tutorial/rxjava-getting-started-1

Brice Dutheil

September 09, 2014
Tweet

More Decks by Brice Dutheil

Other Decks in Technology

Transcript

  1. RxJava
    Getting Started
    Brice Dutheil / David Wursteisen

    View Slide

  2. Brice Dutheil
    @BriceDutheil
    Indep, Devoxx France,
    Hackergarten Paris
    Qui sommes nous ?
    David Wursteisen
    @dwursteisen

    View Slide

  3. Il était une fois...

    View Slide

  4. Il était une fois...

    View Slide

  5. Systèmes distribués

    View Slide

  6. Systèmes distribués

    View Slide

  7. Systèmes distribués

    View Slide

  8. Systèmes distribués

    View Slide

  9. Systèmes distribués
    The Internet

    View Slide

  10. Systèmes distribués

    View Slide

  11. Systèmes distribués

    View Slide

  12. RxJava

    View Slide

  13. Obervable

    View Slide

  14. Obervable

    View Slide

  15. Obervable

    View Slide

  16. Obervable

    View Slide

  17. Observable
    Observable.from(1, 2, 3, 4)

    View Slide

  18. Observable
    Observable.from(1, 2, 3, 4)
    Observable.from(asyncTask.getFuture())

    View Slide

  19. Observable
    Observable.from(1, 2, 3, 4)
    Observable.from(asyncTask.getFuture())
    Observable.range(1, 4400)

    View Slide

  20. Observable
    Observable.from(1, 2, 3, 4)
    Observable.from(asyncTask.getFuture())
    Observable.range(1, 4400)
    Observable.timer(0, 5, TimeUnit.SECONDS)

    View Slide

  21. Observable
    Observable.from(1, 2, 3, 4)
    Observable.from(asyncTask.getFuture())
    Observable.range(1, 4400)
    Observable.timer(0, 5, TimeUnit.SECONDS)
    Observable.create(...)

    View Slide

  22. Observable
    Observable.from(1, 2, 3, 4)
    Observable.from(asyncTask.getFuture())
    Observable.range(1, 4400)
    Observable.timer(0, 5, TimeUnit.SECONDS)
    Observable.create(...)
    Observable.from(anIterable)
    Observable.just(73)
    Observable.error(new Exception())
    Observable.empty()
    ...

    View Slide

  23. Observable
    Observable
    Observable
    Observable

    View Slide

  24. Subscriber
    Observable.range(1, 4400)

    View Slide

  25. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    onNext
    )

    View Slide

  26. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    System.out::println
    )

    View Slide

  27. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    System.out::println,
    onError
    )

    View Slide

  28. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    System.out::println,
    System.err::println
    )

    View Slide

  29. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    System.out::println,
    System.err::println,
    onCompleted
    )

    View Slide

  30. Subscriber
    Observable.range(1, 4400)
    .subscribe(
    System.out::println,
    System.err::println,
    () -> System.out.println(“finished”)
    )

    View Slide

  31. Diagrammes Marble

    View Slide

  32. Diagrammes Marble

    View Slide

  33. Diagrammes Marble

    View Slide

  34. Diagrammes Marble

    View Slide

  35. Diagrammes Marble

    View Slide

  36. Diagrammes Marble

    View Slide

  37. Diagrammes Marble

    View Slide

  38. Diagrammes Marble

    View Slide

  39. Opérateurs
    Observable.from(1, 2, 3, 4)

    View Slide

  40. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter(predicate)

    View Slide

  41. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter((i) -> (i % 2) == 0)

    View Slide

  42. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter((i) -> (i % 2) == 0)
    .subscribe(System.out::println)

    View Slide

  43. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter((i) -> (i % 2) == 0)
    .subscribe(System.out::println)

    View Slide

  44. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter((i) -> (i % 2) == 0)
    .subscribe(System.out::println)
    2

    View Slide

  45. Opérateurs
    Observable.from(1, 2, 3, 4)
    .filter((i) -> (i % 2) == 0)
    .subscribe(System.out::println)
    2
    4

    View Slide

  46. Opérateurs
    Observable.from(1, 2, 3, 4)
    .take(2)
    .subscribe(System.out::println);

    View Slide

  47. Opérateurs
    Observable.from(1, 2, 3, 4)
    .take(2)
    .subscribe(System.out::println);
    1
    2

    View Slide

  48. Opérateurs
    Observable.from(1, 2, 3, 4)
    .map((i) -> i * 10)
    .subscribe(System.out::println);

    View Slide

  49. Opérateurs
    Observable.from(1, 2, 3, 4)
    .map((i) -> i * 10)
    .subscribe(System.out::println);
    10
    20
    30
    40

    View Slide

  50. Composition

    View Slide

  51. Composition

    View Slide

  52. Composition

    View Slide

  53. Composition
    couleurs
    formes

    View Slide

  54. Programmation synchrone
    observableReadingSynchronously(“strings.txt”)
    .take(10)
    .delay(1, SECONDS)
    .map(parse())
    .map(n -> “=> ” + n))
    .subscribe(to_the_view())

    View Slide

  55. Programmation synchrone
    main

    View Slide

  56. Programmation synchrone
    observableReadingSynchronously(“strings.txt”)
    .take(10)
    .delay(1, SECONDS)
    .map(parse())
    .map(n -> “=> ” + n))
    .subscribe(to_the_view())

    View Slide

  57. Programmation asynchrone
    Computation
    IO
    UI
    main
    source

    View Slide

  58. Programmation asynchrone
    Computation
    IO
    UI
    main
    source
    ...
    .subscribeOn(Schedulers.io())

    View Slide

  59. Programmation asynchrone
    Computation
    IO
    UI
    main
    source
    .take(...)
    .subscribeOn(Schedulers.io())

    View Slide

  60. Programmation asynchrone
    Computation
    IO
    UI
    main
    .delay(..., Schedulers.computation())

    View Slide

  61. Programmation asynchrone
    Computation
    IO
    UI
    main
    .delay(..., Schedulers.computation())
    .map(...)

    View Slide

  62. Programmation asynchrone
    Computation
    IO
    UI
    main
    .observeOn(Schedulers.from(...))
    .map(...)

    View Slide

  63. Programmation asynchrone
    Computation
    IO
    UI
    main
    .observeOn(Schedulers.from(...))
    .map(...)
    .subscribe(...)

    View Slide

  64. Programmation asynchrone
    observableReadingSynchronously(“strings.txt”)
    .subscribeOn(scheduler)
    .take(10)
    .delay(1, SECONDS, scheduler)
    .map(parse())
    .observeOn(scheduler)
    .map(n -> “=> ” + n))
    .subscribe(to_the_view())

    View Slide

  65. Programmation asynchrone
    observableReadingSynchronously(“strings.txt”)
    .subscribeOn(Schedulers.io())
    .take(10)
    .delay(1, SECONDS, Schedulers.computation())
    .map(parse())
    .observeOn(Schedulers.from(uiExecutor()))
    .map(n -> “=> ” + n))
    .subscribe(to_the_view())

    View Slide

  66. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  67. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  68. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  69. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  70. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  71. Aller plus loin
    Séquence
    finie & infinie
    Unsubscribe
    BackPressure
    Reactive Streams
    Hot & Cold
    observable

    View Slide

  72. Questions ?

    View Slide