Я новичок в ReactiveX. Я изучал это из чтения исходного кода. Все было так ясно, но внезапно я получил это слово под названием «Потребитель», которое было Интерфейсом. Он был использован вместо Обозревателя.

Может кто-нибудь дать мне знать, что именно он делает?

Я перешел по нескольким ссылкам, но все они сказали, что только одно утверждение Потребитель - это функциональный интерфейс (обратный вызов), который принимает одно значение.

Я хочу знать точную работу этого.

  1. Что это такое?
  2. Зачем нам это нужно?
  3. Как вы используете его?
  4. Это займет место Наблюдателя? Если ДА, как и почему?
18
Abhishek Kumar 8 Сен 2017 в 15:26

3 ответа

Лучший ответ

Consumer - это простой интерфейс Java, который принимает переменная типа T. Как вы сказали, она используется для обратных вызовов.

Примере:

import io.reactivex.functions.Consumer;

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

Почему это работает? Как мы можем использовать Потребителя вместо Наблюдателя?

RxJava просто создает Observer, передает ему Consumer и вызывается в onNext

< Сильный > Обновление

LambdaObserver является своего рода наблюдателем, который создается из четырех функциональных интерфейсов и использует их в качестве обратных вызовов. В основном это для использования java 8 лямбда-выражений. Это выглядит так:

Observable.just(new Object())
                .subscribe(
                        o -> processOnNext(o),
                        throwable -> processError(throwable),
                        () -> processCompletion(),
                        disposable -> processSubscription()
                );
18
Manaus 17 Дек 2019 в 12:02

Consumer использует значения, которые вы получаете при подписке. Это как Subscriber, который передает отправленные данные как обратный вызов.

Consumer - это простой интерфейс, который имеет обратный вызов для универсального типа и необходим для получения испущенных элементов Observable.

Будьте внимательны, если у вас есть только потребитель, который не улавливает ошибки и у вас могут возникнуть проблемы при отладке.

Вы можете решить это, используя другого Потребителя в качестве второго параметра, который получает Throwable.

Flowable.just("Hello world")
  .subscribe(
            emittedData -> System.out.println(emittedData), // onNext
            throwable -> throwable.printStackTrace() // onError
);
7
Roshana Pitigala 11 Апр 2020 в 19:03

По моему скромному мнению, потребитель предназначен для обратных / двунаправленных потоков.

Например, ваш источник данных выдает «Y» сложных зависящих от времени операций, выполняемых из параметра «X» в форме «горячей» текучести (HF).

Предположим, что параметр X излучается через «горячую» наблюдаемую (HO), поэтому ваш источник данных может быть потребителем, который подписывается на «HO» и выдает результат сложных операций через HF.

В этом случае у вас есть двунаправленный поток, и вы использовали потребителя, чтобы протолкнуть дату, предоставленную через HO в источнике данных.

Я не уверен, что мой ответ действительно правильный ... RX немного сложнее: B

0
Felipe Porge Xavier 6 Дек 2018 в 01:41