Yur*_*off 54 java android rx-java
我有SourceObjects列表,我需要将它转换为ResultObjects列表.
我可以使用ResultObject的方法将一个对象提取到另一个对象:
convertFromSource(srcObj);
Run Code Online (Sandbox Code Playgroud)
当然我可以这样做:
public void onNext(List<SourceObject> srcObjects) {
List<ResultsObject> resObjects = new ArrayList<>();
for (SourceObject srcObj : srcObjects) {
resObjects.add(new ResultsObject().convertFromSource(srcObj));
}
}
Run Code Online (Sandbox Code Playgroud)
但我会非常感谢能够使用rxJava展示如何做同样事情的人.
dwu*_*sen 69
如果您Observable
发出a List
,则可以使用以下运算符:
flatMapIterable
(将您的列表转换为Observable项目)map
(将您的项目转换为另一个项目) toList
运算符(将已完成的Observable转换为Observable,该Observable从已完成的Observable中发出项目列表)
Observable<SourceObjet> source = ...
source.flatMapIterable(list -> list)
.map(item -> new ResultsObject().convertFromSource(item))
.toList()
.subscribe(transformedList -> ...);
Run Code Online (Sandbox Code Playgroud)Noe*_*oel 58
如果你想保持Lists
由源发射Observable
,但转换的内容,即Observable<List<SourceObject>>
到Observable<List<ResultsObject>>
,你可以这样做:
Observable<List<SourceObject>> source = ...
source.flatMap(list ->
Observable.fromIterable(list)
.map(item -> new ResultsObject().convertFromSource(item))
.toList()
.toObservable() // Required for RxJava 2.x
)
.subscribe(resultsList -> ...);
Run Code Online (Sandbox Code Playgroud)
这确保了以下几点:
Lists
发射的数量Observable
.即如果源发出3个列表,则另一端将有3个变换列表Observable.fromIterable()
将确保内部Observable
终止以便toList()
可以使用mur*_*rki 10
该Observable.from()工厂方法允许你对象的集合转换成可观察到的数据流.获得流后,您可以使用map运算符转换每个发出的项.最后,您必须订阅生成的Observable才能使用转换后的项目:
// Assuming List<SourceObject> srcObjects
Observable<ResultsObject> resultsObjectObservable = Observable.from(srcObjects).map(new Func1<SourceObject, ResultsObject>() {
@Override
public ResultsObject call(SourceObject srcObj) {
return new ResultsObject().convertFromSource(srcObj);
}
});
resultsObjectObservable.subscribe(new Action1<ResultsObject>() { // at this point is where the transformation will start
@Override
public void call(ResultsObject resultsObject) { // this method will be called after each item has been transformed
// use each transformed item
}
});
Run Code Online (Sandbox Code Playgroud)
如果你使用lambdas的缩写版本将如下所示:
Observable.from(srcObjects)
.map(srcObj -> new ResultsObject().convertFromSource(srcObj))
.subscribe(resultsObject -> ...);
Run Code Online (Sandbox Code Playgroud)
不要打破链条,就像这样。
Observable.from(Arrays.asList(new String[] {"1", "2", "3", }))
.map(s -> Integer.valueOf(s))
.reduce(new ArrayList<Integer>, (list, s) -> {
list.add(s);
return list;
})
.subscribe(i -> {
// Do some thing with 'i', it's a list of Integer.
});
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
49699 次 |
最近记录: |