2014-09-04 69 views
1

我試圖在RxJava中找到適合下一個序列操作的操作:按順序「拆分」/「生成」操作?

[A],[B],[C] - > Aa,Ab,Ac,Ba,Bb,Bc,Ca ,Cb

這個實際的用例是我有一個Observable,它包含了我試圖轉換成Observable的條目列表,這些條目從列表中發射出來。

像這樣:

Observable<List<Item>> ---> Observable<Item> 

我似乎無法找到一個合適的RxJava操作,會做類似的東西 - 有flatMap(),這是我想要的完全相反的,但沒有「生成「或」mapToMany「操作。我錯過了什麼?

回答

2

flatMap()聽起來像是你在找什麼:

// This assumes that generating originalObservable is not under your control 
// and is returned from some other API call you are making. 
List<Item> originalList = Arrays.asList(new Item(), new Item(), new Item()); 
Observable<List<Item>> originalObservable = Observable.just(originalList); 

Observable<Item> itemObservable = 
     originalObservable 
       .flatMap(new Func1<List<Item>, Observable<Item>>() { 
        @Override 
        public Observable<Item> call(List<Item> items) { 
         return Observable.from(items); 
        } 
       }); 

如果你確實有訪問originalList(而不是從其他API調用originalObservable),你可以從使用()來從它創建一個可觀察:

Observable<Item> itemObservable = Observable.from(originalList); 

我不知道如何與您的原始序列([A],[B],[C] - > AA,AB,AC,BA,BB,BC ,Ca,Cb,Cc),因爲我不確定小a,b和c來自哪裏。如果它們是獨立的值,不需要大寫A,B和C來生成它們,那麼flatMap()就是你想要的。

Observable<String> result = 
     Observable 
       .just("A", "B", "C") 
       .flatMap(new Func1<String, Observable<String>>() { 
        @Override 
        public Observable<String> call(String s) { 
         return Observable 
           .just(s + "a", s + "b", s + "c"); 
        } 
       }); 
+0

是的,我認爲我解釋得很糟糕 - 我有一系列項目列表,我想要扁平化爲這些列表中連續的項目。看來flatMap可能正是我想要的,我只是誤解了文檔。 – Mavrik 2014-09-04 18:31:50