我需要编写一个函数来获取字符串作为输入,然后生成两个文件,并将它们压缩在一起。对于非响应式代码,它会:
void func(String input){
byte[] a = generateFileForA(input);
byte[] b = generateFileForB(input);
byte[] zip = zipFiles(a,b);
doSomethingWithZip(zip);
}我如何使用rx-java以反应式的方式实现这样的逻辑?
发布于 2020-03-20 04:55:39
我不确定您的特定用例,也不确定使用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];
}}
https://stackoverflow.com/questions/60762645
复制相似问题