Ich habe eine Liste List<Single<String>>
, die ich in eine List<String>
verwandeln möchte.Wie transformiere ich die Liste <Single <String>> in die Liste <String>?
Die Reihenfolge sollte beibehalten werden und alle Singles sollten parallel verarbeitet werden.
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();
});
}
Meine anfängliche Implementierung verwendet Observable.concatWith
aber das wird im Grunde eine parallele Verarbeitung verhindern, weil jeder einzelne hintereinander gezeichnet wird.
Ich weiß auch, dass ich die Liste der Singles in ein Observable drehen kann, das die Saiten ausstrahlt, aber ich verliere die Reihenfolge in diesem Fall.
List<Observable<String>> obsList = list.stream().map(Single::toObservable).collect(Collectors.toList());
Observable.merge(obsList).....
, die nicht den Auftrag überhaupt ist die Erhaltung. '' '[test_0, test_3, test_6, test_2, test_8, test_9, test_1, test_4, test_5, test_7]' '' – Jotschi
Entschuldigung, habe diese Anforderung nicht gesehen, Antwort aktualisiert. – akarnokd
Sehr schön ... funktioniert perfekt. Das subscribeOn kann in meinem Fall entfallen. – Jotschi