1

潜在的に存在するストリームに新しいオブジェクトを挿入しようとしています。

私がこれを持っているとしましょう:

ItemUtils.java

public static void processItems(List<Item> items) {
    Observable.from(items)
        .subscribeOn(Schedulers.io())
        .flatMap(ItemUtils::doSomeHeavyProcessing)
        .observeOn(AndroidSchedulers.mainThread())
        .subscribe();
}

そして別のクラスで:

List<Item> items = new ArrayList<>();

public void onClick() {
    processItems(list);
}

せっかちなユーザーがボタンを押すたびに、1 つの固有のアイテム ストリームにアイテムを挿入することは可能ですか?

4

2 に答える 2

1

リスト項目が、processItems が既に開始されている間にユーザーがさらに項目を追加できるキューのようなものである場合は、Subjectsを使用する必要があります。

Queue<Item> items = new LinkedList<>();
PublishSubject<Item> subject = PublishSubject.create(); 

...
//subscribe once and supply new items in onClick
subject.subscribeOn(Schedulers.io())
    .flatMap(ItemUtils::doSomeHeavyProcessing)
    .observeOn(AndroidSchedulers.mainThread())
    .subscribe();

...
public void onClick() {
    while(!queue.isEmpty()){
        subject.onNext(queue.remove());
    }
}
于 2015-04-13T07:52:31.053 に答える