rx- java создайте два файла и заархивируйте их из строкового ввода - PullRequest
0 голосов
/ 19 марта 2020

Мне нужно написать функцию, которая получает строку в качестве входных данных, затем сгенерировать два файла и сжать их вместе. Для нереактивного кода было бы:

void func(String input){
    byte[] a = generateFileForA(input);
    byte[] b = generateFileForB(input);
    byte[] zip = zipFiles(a,b);
    doSomethingWithZip(zip);
}

Как я могу реализовать такие логи c реактивным способом, используя rx- java?

1 Ответ

0 голосов
/ 19 марта 2020

Я не уверен в вашем конкретном 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];
}

}

...