2016-08-03 64 views
2

我想收集集合中发出的每个项目。我这样做:将观察值转换为RxJava中的集合

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内置的方式来执行此操作?

回答

3

使用toList来收集发出的字符串,并且一旦观察结束完成,就将它们作为单个列表发出。

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