在RxJava中将Observable转换为Collection

时间:2016-08-03 09:31:58

标签: rx-java

我想收集Collection中发出的每个项目。我是这样做的:

List found = new ArrayList();
controller.search(query)
          .doOnCompleted(new Action0() {
            @Override
            public void call() {
                //Do something with "found" list
            }
        }).subscribe(new Action1<String>() {
            @Override
            public void call(String item) {
                found.add(item);
            }
        });

是否有RxJava内置方式来实现这一目标?

2 个答案:

答案 0 :(得分:4)

使用toList收集发出的字符串,并在observable完成时将它们作为单个列表发出。

controller.search(query)
          .toList()
          .subscribe(new Action1<List<String>>() {
            @Override
            public void call(List<String> found) {
                // Do something with the list
            }
        });

答案 1 :(得分:2)

如果您的搜索查询返回一个集合,您可以使用扫描运算符为每个发出的项目合并列表。

@Test
public void collectCollections() {
    Observable.from(Arrays.asList(1, 2, 3))
              .map(Arrays::asList)
              .scan(new ArrayList<Integer>(), (l1, l2) -> {
                  l1.addAll(l2);
                  return l1;
              }).subscribe(System.out::println);
}

您可以在此处查看更多示例https://github.com/politrons/reactive