2016-06-11 63 views

回答

4

您可以使用Observable.from(Iterable<A>)得到Observable<A>,它映射(A => B),並將其轉換爲List<B>Observable.toList()

Observable.from(Arrays.asList(1, 2, 3)) 
.map(val -> mapIntToString(val)).toList() 

例如

Observable.from(Arrays.asList(1, 2, 3)) 
.map(val -> val + "mapped").toList() 
.toBlocking().subscribe(System.out::println); 

產生

[1mapped,2mapped,3mapped]

0

您還可以使用組成將獲得可觀察到的,將返回不同的。

Observable.Transformer<Integer, String> transformIntegerToString() { 
    return observable -> observable.map(String::valueOf); 
    } 


    @Test 
public void observableWithTransformToString() { 
    Observable.from(Arrays.asList(1,2,3)) 
       .map(number -> { 
        System.out.println("Item is Integer:" + Integer.class.isInstance(number)); 
        return number; 
       }) 
       .compose(transformIntegerToString()) 
       .subscribe(number -> System.out.println("Item is String:" + (String.class.isInstance(number)))); 

} 

您可以在這裏看到更多的例子

https://github.com/politrons/reactive

2

我回答了另一個類似的問題在這裏:https://stackoverflow.com/a/42055221/454449

我在這裏複製的答案爲方便(不知道這違背規則):

如果要維護源01發出的但轉換的內容,即Observable<List<SourceObject>>Observable<List<ResultsObject>>,你可以做這樣的事情:

Observable<List<SourceObject>> source = ... 
source.flatMap(list -> 
     Observable.fromIterable(list) 
      .map(item -> new ResultsObject(item)) 
      .toList() 
      .toObservable() // Required for RxJava 2.x 
    ) 
    .subscribe(resultsList -> ...); 

這確保了兩件事情:

  • 維持由Observable發出Lists數。即,如果源發射3所列出,會有在另一端
  • 使用Observable.fromIterable()將確保內Observable 3名轉化列表終止,使得toList()可用於
相關問題