2015-06-14 19 views
7

我有以下用例(這當然是一個人爲的例子,但是一旦我知道答案,我將能夠將它移植到我要解決的實際問題):收集分組的可觀察量的排放到一個列表中

  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))不會改變任何內容,因爲它僅影響每個分組的觀察值,而不影響整個流。有沒有辦法滿足我的要求?

+1

我不知道如果我理解你正確,但這是一個產生你想要的輸出的要點 - https://gist.github.com/nsk-mironov/e13fe46938bf887f174a –

+0

這正是我想要得到的。當你用代碼寫一個答案以便我可以接受它時,我會試着去理解它; d – wujek

回答

16

我不知道如果我理解正確你,但基於這裏所期望的輸出,你可能會尋找代碼:

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); 
      }); 
} 
+0

我把flatMap放在錯誤的地方。謝謝。你很擅長這個; d – wujek

相關問題