【问题标题】:Create a Subject创建主题
【发布时间】:2015-03-19 06:03:35
【问题描述】:

我在 RxJS 中看到过这个,但我在 RxJava 中没有找到等价物。有谁知道如何在java中设置这样的东西?

RxJS Subject.create(observer, observable)

从指定的观察者和可观察者创建一个主题。

参数

观察者(Observer):用于向主题发送消息的观察者。

observable(可观察):用于订阅从主题发送的消息的可观察对象。

基本上,这将是一个主题,您可以通过它向另一个观察者发送数据,并拥有一个可将数据发送回主题订阅者的可观察对象。

我正在尝试在 RxJava 中复制this github issue post 中看到的代码。

【问题讨论】:

    标签: java android rx-java rxjs


    【解决方案1】:

    主题也可以在 RxJava 中创建。您可以通过每种类型的工厂方法创建它们。因此,例如,如果您想创建一个 AsyncSubject,您可以使用:

    Subject<String> subject = AsyncSubject.<String>create();
    

    有关受支持的不同类型的主题,请参阅此文档:Subject subject = AsyncSubject.create();如果您想将其返回给用户,您当然可以将其向下转换为 Observable,这样用户就不会知道它实际上是一个主题。

    引用您的链接问题,您可以使用主题上的 on* 方法将数据输入其中,然后观察者可以使用它。

    【讨论】:

    • 感谢 moidaschl 的回复。我知道如何创建主题,我只是想知道上述 github 问题帖子中的设置是否可行。 (即有一个你向其提供数据的主题,该主题被提供给另一个可观察对象,并且有一个将主题作为订阅者的可观察对象)
    【解决方案2】:

    在 RxJava 中,我认为最接近的方法是订阅 Observable,将 Subject 作为 Observer 传递。

    final Observable<Integer> observable = Observable.just(1, 2, 3, 4, 5);
    final AsyncSubject<Integer> subject = AsyncSubject.create();
    observable.subscribe(subject);
    subject.subscribe(new Action1<Integer>() {
        @Override
        public void call(Integer integer) {
            // TODO
        }
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-04-11
      • 1970-01-01
      • 2020-01-22
      • 1970-01-01
      • 1970-01-01
      • 2021-09-09
      • 2018-06-20
      相关资源
      最近更新 更多