Я не уверен в вашем конкретном c сценарии использования или в преимуществах использования Rx для этой конкретной работы (кроме простой поточной обработки потенциально).
Однако что-то вроде этого псевдокода будет работать:
public class Zip {
public static void main(String[] args) {
final Zip zip = new Zip();
final Disposable d = zip.func("some input")
.subscribeOn(Schedulers.io())
.observeOn(Schedulers.single())
.subscribe(result -> { }, System.out::println);
}
Single<byte[]> func(String input) {
return Single.zip(
generate(input, new File("myFileA")),
generate(input, new File("myFileB")),
this::zipFiles);
}
private Single<byte[]> generate(String input, File output) {
return Single.fromCallable(() -> {
// Do Work
return new byte[0];
}).subscribeOn(Schedulers.io()); /* Parallel execution */
}
private byte[] zipFiles(byte[] a, byte[] b) {
// Do work
return new byte[0];
}
}