使用Reactivex的Consumer接口

时间:2017-09-08 12:26:40

标签: android retrofit rx-java rx-android reactivex

我是ReactiveX的新手。我正在从源代码中学习它。一切都是如此清晰但突然间我得到了这个名为" Consumer"这是一个接口。它被用来代替观察者。 有人能告诉我它到底是做什么的吗?

我关注了几个链接,但他们只是说了一个声明消费者是一个接受单个值的功能接口(回调)。 我想知道它的确切工作。

  1. 这是什么?
  2. 为什么我们需要它?
  3. 如何使用它?
  4. 是否代替观察者?如果是,如何以及为什么?

3 个答案:

答案 0 :(得分:10)

Consumer是一个简单的java接口,它接受T类型的变量。 正如你所说它用于回调。

示例:

LambdaObserver

为什么会这样?我们如何使用Consumer而不是Observer?

RxJava只是创建一个Observer,将Consumer传递给它,并在onNext中调用

<强>更新

Observable.just(new Object()) .subscribe( o -> processOnNext(o), throwable -> processError(throwable), () -> processCompletion(), disposable -> processSubscription() ); 是一种由四个功能接口创建的观察者,并将它们用作回调。它主要用于使用java 8 lambda expressions。它看起来像这样:

NaN

答案 1 :(得分:3)

Consumer消耗订阅时收到的值。它就像Subscriber一样将发出的数据作为回调传递。

Consumer是一个简单的接口,它具有泛型类型的回调,需要Observable接收发出的项目。

请注意,如果您只有消费者,您不会发现错误,并且您可能会通过调试遇到问题。

您可以使用另一个Consumer作为接收Throwable的第二个参数来解决这个问题。

Flowable.just("Hello world")
  .subscribe(
            emittedData -> System.out.println(s), 
            error -> System.out.println("Error occured: "+ error)
);

答案 2 :(得分:0)

在我的拙见中,消费者是反向/双向流。

例如,您的数据源以“热”可流动(HF)的形式发出从“ X”执行的,与时间相关的复杂操作的“ Y”。

假设参数X是通过“热”可观测(HO)发出的,那么您的数据源可以是订阅“ HO”并通过HF发出复杂运算结果的使用者。

在这种情况下,您具有双向流,并且使用了使用者将通过HO所提供的日期推送到数据源中。

我不确定我的答案是否正确... rx有点复杂:B