给定输入:
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
将数字按奇数或偶数分组,然后按小于或大于 5 分组。
预期输出:
[[1, 3, 5], [2, 4], [6, 8, 10], [7, 9]]
输出的顺序不受限制。
我现在使用以下方法:
Observable.range(1, 10)
.groupBy(n -> n % 2 == 0)
.flatMap((GroupedObservable<Boolean, Integer> g) -> {
return Observable.just(g).flatMap(ObservableUtils.<Boolean, Integer>flatGroup()).groupBy(n -> n > 5);
})
.subscribe((final GroupedObservable<Boolean, Integer> g) -> {
Observable.just(g).flatMap(ObservableUtils.<Boolean, Integer>flatGroup()).forEach(n -> println(g + ": " + n));
});
请注意,ObservableUtils 是我为简化代码而编写的。
但我对此并不满意,因为它仍然不够短,无法简单地表明目标。
我期望的是这样的:
Observable.range(1, 10)
.groupBy(n -> n % 2 == 0)
.groupBy(n -> n > 5)
.subscribe(...);
目前我只能将其缩小为:
Observable.range(1, 10)
.lift(new OperatorGroupByGroup(n -> n % 2 == 0))
.lift(new OperatorGroupByGroup(n -> n > 5))
.subscribe(...);
我仍然需要编写有点复杂的 OperatorGroupByGroup 类。有什么改进建议吗?
最佳答案
尝试这样做。
Observables.range(1,10)
.groupBy( n -> n % 2 == 0)
.flatMap( grp -> grp.groupBy( n -> n > 5).flatMap( grp2 -> grp2.toList()))
.subscribe(...)
关于java - 如何链接多个 RxJava 的 groupBy() 方法,例如 groupBy().groupBy(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28231000/