我正在使用RxJava,我希望根据某些条件动态创建一些Observable。一旦我完成了创建,我想对observable返回的不同值进行一些处理,然后作为我可以订阅的单个Observable发送。以下是我的代码:
List<String> valueList = ....
List<Observable<String>> listOfObservables = new ArrayList<Observable<String>>();
for(int i =; i <valueList.size(); i++){
listOfObservables.add(new SomeClass.doOperation(valueList(i)));
// SomeClass.doOperation will return an Observable<String>
}
return Observable.merge(listOfObservables);
但是在这里,我想对listOfObservable
中不同Observable发出的值进行一些操作,最后将其作为单个Observable<String>
与Observable.zip()
一样,我可以像
return Observable.zip(observable1, observable2, (string1, string2) -> {
// joining final string here
return string1 + string2;
但我知道这里的论点数量。请让我知道如何实现这一目标。
答案 0 :(得分:0)
使用zip
重载that takes a variable number of arguments,它的签名为
<R> Observable<R> zip(Iterable<? extends Observable<?>> ws,
FuncN<? extends R> zipFunction)
使用示例:
List<String> valueList = ....
return Observable.from(valueList)
.map(string -> SomeClass.doOperationThatReturnsObservable(string))
.toList()
.flatMap(listOfObs -> Observable.zip(listOfObs, (Object[] results) -> {
// do something with the strings in the array.
return Arrays.stream(results)
.map(Object::toString)
.collect(Collectors.joining(","));
}));