【问题标题】:Collect grouped observables' emissions into one list将分组的 observables 的排放量收集到一个列表中
【发布时间】:2015-06-14 15:16:46
【问题描述】:

我有以下用例(这当然是一个人为的例子,但一旦我知道答案,我就能将它移植到我要解决的实际问题上):

  1. 获取整数列表。
  2. 按 % 4 操作的结果对它们进行分组
  3. 将每个组的元素收集到列表中
  4. 忽略任何元素少于 3 个元素的组/列表
  5. 发出一个列表,其元素是在步骤 #3 中创建的列表

这是我当前的代码:

    Observable
            .from(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12))
            .groupBy(item -> item % 4)
            .subscribe(groupedObservable -> {
                groupedObservable
                        .toList()
                        .filter(list -> list.size() > 2)
                        .subscribe(result -> {
                            System.out.printf("%d results %s%n", result.size(), result);
                        });
            });

它的输出是:

4 results [0, 4, 8, 12]
3 results [2, 6, 10]
3 results [3, 7, 11]

所以它会打印出每个组有多少元素,然后是元素列表。我希望输出是(我实际上并不关心键):

3 个结果:[[0, 4, 8, 12], [2, 6, 10], [3, 7, 11]]

即以某种方式将分组的 observables 扁平化为一个列表。我没有这样做。例如,在filter 之后添加.flatMap(integers -> Observable.just(integers)) 不会改变任何东西,因为它只会影响每个分组的可观察对象,而不是整个流。有没有办法满足我的要求?

【问题讨论】:

  • 我不确定我是否理解正确,但这里有一个产生你想要的输出的要点 - gist.github.com/nsk-mironov/e13fe46938bf887f174a
  • 这正是我想要得到的。当您用代码编写答案以便我接受时,我会尝试理解它;d

标签: rx-java


【解决方案1】:

我不确定我是否理解正确,但根据所需的输出,这里是您可能正在寻找的代码:

public static void main(final String[] args) throws Exception {
    Observable.from(Arrays.asList(0, 1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12))
            .groupBy(item -> item % 4)
            .flatMap(Observable::toList)
            .filter(integers -> integers.size() > 2)
            .toList()
            .subscribe(result -> {
                System.out.printf("%d results %s%n", result.size(), result);
            });
}

【讨论】:

  • 我把我的 flatMap 放错了地方。谢谢你。你很擅长这个;d
猜你喜欢
  • 1970-01-01
  • 2017-11-18
  • 2014-12-23
  • 1970-01-01
  • 2020-05-26
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
相关资源
最近更新 更多