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