Вы можете достичь этого следующим образом:
List<Observable<String>> downloads = new ArrayList<>();
//delay operator is to simulate a long-running operation
downloads.add(Observable.fromCallable(() -> "download 1").delay(1, TimeUnit.SECONDS));
downloads.add(Observable.fromCallable(() -> "download 2").delay(2, TimeUnit.SECONDS));
downloads.add(Observable.fromCallable(() -> "download 3").delay(5, TimeUnit.SECONDS));
downloads.add(Observable.fromCallable(() -> "download 4").delay(3, TimeUnit.SECONDS));
Observable.fromIterable(downloads)
.flatMap(stringObservable -> stringObservable)
.toList()
.doOnSuccess(completedDownloads -> {
for (String completedDownload : completedDownloads) {
System.out.println("completed: " + completedDownload);
}
})
.subscribe();