我想在RxJava中实现相当简单的DAG。
我们有一个物品来源:
Observable<String> itemsObservable = Observable.fromIterable(items)
接下来,我想有一个处理器可以订阅itemsObservable
,并使多个订阅者可以订阅它。
所以我创建了:
PublishProcessor<String> itemsProccessor = PublishProcessor.create();
不幸的是,这不可能:
itemsObservable.subscribe(itemsProccessor);
为什么?实现这种DAG的合适API是什么?
以下是演示图:
这是我(失败的)尝试实施这种DAG的尝试:
List<String> items = Arrays.asList("a", "b", "c");
Flowable<String> source = Flowable.fromIterable(items);
PublishProcessor<String> processor = PublishProcessor.create();
processor.doOnNext(s -> s.toUpperCase());
processor.subscribe(System.out::println);
processor.subscribe(System.out::println);
source.subscribe(processor);
答案 0 :(得分:3)
这是因为PublishProcessor
实现了Subscriber
,而Observable
的订阅方法却接受了Observer
。您可以将itemsObservable
转换为Flowable
,它将完成工作。
Observable<String> items = Observable.fromIterable(Arrays.asList("a","b"));
PublishProcessor<String> processor = PublishProcessor.create();
items.toFlowable(BackpressureStrategy.BUFFER)
.subscribe(processor);