2016-08-03 7 views
2

Ich möchte jedes Element in einer Sammlung gesammelt sammeln. Ich mache es so:Convert Observable in Sammlung in 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); 
      } 
     }); 

Gibt es eine eingebaute RxJava-Methode, um dies auszuführen?

Antwort

3

Verwenden Sie toList, um die emittierten Strings zu sammeln und sie als eine einzige Liste zu senden, sobald das Observable z.

2

Wenn Ihre Suchabfrage eine Sammlung zurückgibt, können Sie mit dem Scan-Operator die Liste für jedes ausgegebene Element zusammenführen.

@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); 
} 

können Sie weitere Beispiele siehe hier https://github.com/politrons/reactive

Verwandte Themen