2016-06-11 66 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()可用于
相关问题