rxjava - как принимать переменные выбросы от двух наблюдаемых - PullRequest
0 голосов
/ 19 ноября 2018

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

  Observable<String> observable = Observable.just("hello","are", "doing");
        Observable<String> observable2 = Observable.just("how","you","today");

Я хотел бы «уменьшить» это так, чтобы конечные выбросы были бы « Привет, как дела?делая сегодня

здесь я попытался использовать сканирование, но оно работает больше как накопление, и я получаю следующие результаты:

Observable.merge(observable, observable2).reduce(new BiFunction<String, String, String>() {
        @Override
        public String apply(String wordAccum1, String word2) {
            return wordAccum1 + " " + word2;
        }

    }).subscribe(new Consumer<String>() {
        @Override
        public void accept(String sentence) throws Exception {
            Log.v("consumerResult",sentence+"");
        }
    });

вывод журнала показывает: consumerResult: приветделаешь как ты сегодня

как я могу последовательно брать у каждого из них?

1 Ответ

0 голосов
/ 19 ноября 2018

Попробуйте это

    Observable<String> observable = Observable.just("hello", "are", "doing");
    Observable<String> observable2 = Observable.just("how", "you", "today");


    observable.zipWith(observable2, new BiFunction<String, String, String>() {
        @Override
        public String apply(String s, String s2) throws Exception {
            return s+" "+s2;
        }
    }).reduce(new BiFunction<String, String, String>() {
        @Override
        public String apply(String s, String s2) throws Exception {
            return s+ " " + s2;
        }
    }).subscribe(new Consumer<String>() {
        @Override
        public void accept(String s) throws Exception {
            System.out.println(s); // this will emit with "hello how are you doing today"
        }
    });

Если вы используете Java 8, вы можете уменьшить тот же код с помощью лямбды, как показано ниже

 observable.zipWith(observable2, (s, s2) -> s + " " + s2)
            .reduce((s, s2) -> s +" "+ s2).subscribe(System.out::println);
...