如何限制RxJava merge()中的活动流数量?

时间:2017-08-17 08:56:36

标签: rx-java rx-java2

我正在寻找一种方法将多个事件流与merge()运算符组合在一起,并且拥有有限数量的“活动流”。例如,当我合并6个流(它们都在不同的线程上工作)时,merge()将订阅所有这些流,但我需要它首先订阅3,当其中一个完成另一个时,应该订阅直到所有6个流完成。是否可以通过merge或任何其他RxJava运算符实现此目的,还是应该由我自己编写?

1 个答案:

答案 0 :(得分:0)

您可以在合并运算符中使用值maxConcurrency,但您必须将所有Observable包装在一起。

  @Test
    public void testMergeMaxConcurrency() {
        Observable.merge(Observable.just(
                 Observable.just(3),
                 Observable.just(5),
                 Observable.just(1),
                 Observable.just(4),
                 Observable.just(2)), 2)
                .collect(ArrayList<Integer>::new, ArrayList::add)
                .doOnNext(Collections::sort)
                .subscribe(System.out::println);
    }