java - 如何链接多个 RxJava 的 groupBy() 方法,例如 groupBy().groupBy()

标签 java android rx-java reactive-programming

给定输入:

[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/

相关文章:

使用带有 CDATA 部分的 Transformer 的 Java 格式 xml

java - 从另一个包添加实体时为 "QuerySyntaxException: User is not mapped"

android - EditText.getText() 可以为空吗?

java - 为什么我的格式总是提示错误,当我使用 simpledateFormat

android - 使用 Observable Zip 行为不当

java - RxJava : "java.lang.IllegalStateException: Only one subscriber allowed!"

android - 在 RxJava 中处理 Completable、Single、Maybe 和终止 Observable 的最佳实践

javascript - 在 Kendo-grid 中部分渲染列

java - 当有文本字段溢出时缺少单词

android - 如何在切换条件下移动到下一个案例