我需要编写一个将字符串作为输入的函数,然后生成两个文件,并将它们压缩在一起。对于非反应性代码,它希望:
void func(String input){
byte[] a = generateFileForA(input);
byte[] b = generateFileForB(input);
byte[] zip = zipFiles(a,b);
doSomethingWithZip(zip);
}
如何使用rx-java以反应方式实现这种逻辑?
我不确定您的特定用例,还是不确定将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]; }
}