RxJava groupBy和后续的阻塞操作(onComplete缺失?)

时间:2015-08-13 16:50:56

标签: java rx-java

我已将问题归结为以下代码段:

Observable<Integer> numbers = Observable.just(1, 2, 3);

Observable<GroupedObservable<Integer,Integer>> outer = numbers.groupBy(i->i%3);
System.out.println(outer.count().toBlocking().single());

无休止地阻止。我已经reading several posts并且相信我理解了这个问题:GroupedObservables在内部Observables也已完成之前不会调用onComplete。不幸的是,虽然我仍然无法将上述代码段打印出来!

例如,以下内容:

Observable<Integer> just = Observable.just(1, 2, 3);

Observable<GroupedObservable<Integer,Integer>> groupBy = just.groupBy(i->i%3);
groupBy.subscribe(inner -> inner.ignoreElements());
System.out.println(groupBy.count().toBlocking().single());

仍然无能为力。我误解了这个问题吗?还有其他问题吗?简而言之,我如何才能使上述代码片段起作用?

非常感谢, 丹。

1 个答案:

答案 0 :(得分:1)

是的,您必须以某种方式使用这些群组。您的第二个示例不起作用,因为您有两个独立的分组操作订阅。

通常,解决方案为flatMap,但不是ignoreElements,因为这只会完成,count无法获得任何元素。相反,您可以使用takeLast(1)

Observable.just(1, 2, 3)
    .groupBy(k -> k % 3)
    .flatMap(g -> g.takeLast(1))
    .count()
    .toBlocking()
    .forEach(System.out::println);