Using Consumer interface of Reactivex

Abhishek Kumar picture Abhishek Kumar · Sep 8, 2017 · Viewed 8.3k times · Source

I'm new to ReactiveX. I was learning it from reading source-code. Everything was so clear but suddenly I got this word named "Consumer" which was an Interface. It was used in place of Observer.

Can someone let me know what it exactly does?

I followed several links but they just all said just one statement Consumer is a functional interface (callback) that accepts a single value.

I want to know the exact working of it.

  1. What is it?
  2. Why do we need it?
  3. How do you use it?
  4. Does it take the place of Observer? If YES, how and why?

Answer

Amaksoft picture Amaksoft · Sep 8, 2017

Consumer is a simple Java interface that accepts variable of type T. Like you said it is used for callbacks.

Example:

import io.reactivex.functions.Consumer;

Flowable.just("Hello world").subscribe(new Consumer<String>() {
      @Override public void accept(String s) {
          System.out.println(s);
      }
  });

Why does it work? How can we use a Consumer instead of an Observer?

RxJava simply creates an Observer, passes the Consumer to it an it gets called in onNext

Update

LambdaObserver is a kind of observer that is created out of four functional interfaces and uses them as callbacks. It's mostly for using java 8 lambda expressions. It looks like this:

Observable.just(new Object())
                .subscribe(
                        o -> processOnNext(o),
                        throwable -> processError(throwable),
                        () -> processCompletion(),
                        disposable -> processSubscription()
                );