我有一个列表List<Single<String>>,我想变成一个List<String>.
应保留订单,并且应并行处理所有Single.
List<Single<String>> list = new ArrayList<>();
for (int i = 0; i < 10; i++) {
list.add(createSingle(i));
}
// Dummy method which creates a single instance
private Single<String> createSingle(int i) {
return Single.create(sub -> {
new Thread(() -> {
try {
Thread.sleep(800);
} catch (InterruptedException e) {
e.printStackTrace();
}
sub.onSuccess("test_" + i);
}).start();
});
}
Run Code Online (Sandbox Code Playgroud)
我使用了我的初始实现,Observable.concatWith但这基本上会阻止并行处理,因为每个单元都是一个接一个地订阅.
我也知道我可以将单曲列表转换成一个发出字符串的Observable,但在这种情况下我放松了顺序.
List<Observable<String>> obsList = list.stream().map(Single::toObservable).collect(Collectors.toList());
Observable.merge(obsList).....
Run Code Online (Sandbox Code Playgroud)
怎么样
List<Single<String>> list = ...
Observable.from(list)
.concatMapEager(s -> s.toObservable().subscribeOn(Schedulers.computation()))
.toList()
.subscribe(System.out::println, Throwable::printStackTrace);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
957 次 |
| 最近记录: |