Reputation: 1
I need to download Multiple file consider each as observable, trying to use zip to download all and return value only when entire download complete
Upvotes: 0
Views: 312
Reputation: 2526
You can achieve it like this:
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();
Upvotes: 1