我已将问题归结为以下代码段:
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());
仍然无能为力。我误解了这个问题吗?还有其他问题吗?简而言之,我如何才能使上述代码片段起作用?
非常感谢, 丹。
答案 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);