2016-08-03 6 views
2

Collectionで発行されたすべてのアイテムを収集したいと思います。私はこのようにしています:RxJavaでObservableを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の組み込み方法はありますか?

答えて

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

を見ることができます
関連する問題