Skip to content

Instantly share code, notes, and snippets.

@cesarferreira
Last active March 30, 2025 00:28
Show Gist options
  • Save cesarferreira/510aa2456dc0879f559f to your computer and use it in GitHub Desktop.
Save cesarferreira/510aa2456dc0879f559f to your computer and use it in GitHub Desktop.
Party tricks with RxJava, RxAndroid & Retrolambda

Filter even numbers

Observable
    .just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    .filter(integer -> integer % 2 == 0)
    .subscribe(System.out::println);

    // => 2, 4, 6, 8, 10

Iterating with "forEach"

Observable
    .just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    .forEach(System.out::println);
    
    // => 1, 2, 3, 4, 5, 6, 7, 8, 9, 10

Group by

Observable
    .just(1, 2, 3, 4, 5)
    .groupBy(integer -> integer % 2 == 0).subscribe(grouped -> {
        grouped.toList().subscribe(integers -> {
            log(integers + " (Even: " + grouped.getKey() + ")");
        });
    });

    // [1, 3, 5] (Even: false)
    // [2, 4] (Even: true)

Take only the first N values emitted

Observable
    .just(1, 2, 3, 4, 5)
    .take(2)
    .subscribe(System.out::println);

    // => 1, 2

First

Observable
    .just(1, 2, 3, 4, 5)
    .first()
    .subscribe(System.out::println);

    // => 1

Last

Observable
    .just(1, 2, 3, 4, 5)
    .last()
    .subscribe(System.out::println);

    // => 5

Distinct

Observable
    .just(1, 2, 1, 3, 4, 2)
    .distinct()
    .subscribe(System.out::println);

    // => 1, 2, 3, 4

Iterate an array list

List<User> users = ArrayList<>();

users.add(new User("jon snow"));
users.add(new User("tyrion lannister"));

Observable
    .just(users)
    .concatMap(userList -> Observable.from(userList))
    .subscribe(user -> log(user.name));
    
    // concatMap: when applied to an item emitted by the source Observable, returns an Observable
    
    // => "jon snow", "tyrion lannister"

Observe text changes on an EditText (RxAndroid)

 Observable<OnTextChangeEvent> usernameObservable = WidgetObservable.text(editText);
 usernameObservable
    .subscribe(e -> log(e.text().toString()));
    
    // => "s"
    // => "se"
    // => "sea"
    // => "sear"
    // => "searc"
    // => "search"

Filter text changes on an EditText (RxAndroid)

 Observable<OnTextChangeEvent> usernameObservable = WidgetObservable.text(editText);
 usernameObservable
    .filter(e -> e.text.length() >= 3)
    .subscribe(e -> log(e.text().toString()));
    
    // => "sea"
    // => "sear"
    // => "searc"
    // => "search"

Thread safety (RxJava + RxAndroid + Retrolambda)

 Observable
    .just(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
    .observeOn(AndroidSchedulers.mainThread()) // the result subscription will happen in the UI Thread
    .subscribeOn(Schedulers.computation()) // all the computation will happen in a background thread
    .concatMap(this::heavyCalculations) // do the calculations for each item and returns it to the subscribable observer
    .subscribe(number -> log(number));
    
@mzennis
Copy link

mzennis commented Dec 12, 2017

this exactly what i looking for, thankyou

@mohsen1920tavoosi
Copy link

thanks for these samples

@Flaccuss
Copy link

Many thanks for simple examples :)

@ParvinderMaan
Copy link

great job buddy

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment