0
我有一个列表List<Single<String>>
,我想变成List<String>
。如何将List <Single <String>>转换为列表<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();
});
}
我最初的实现中所使用Observable.concatWith
但将基本上防止并行处理,因为每个单订阅一个在另一个之后。
我也知道我可以将单打的列表变成一个可以发射字符串的Observable,但是我在这种情况下放弃了命令。
List<Observable<String>> obsList = list.stream().map(Single::toObservable).collect(Collectors.toList());
Observable.merge(obsList).....
那不是维护秩序可言。 '''[test_0,test_3,test_6,test_2,test_8,test_9,test_1,test_4,test_5,test_7]''' – Jotschi
对不起,没有看到那个要求,回答更新。 – akarnokd
非常好...完美的作品。在我的情况下subscribeOn可以省略。 – Jotschi