Как сделать действие на Flowable - PullRequest
0 голосов
/ 27 мая 2019

Здравствуйте, я новичок в RxJava, у меня есть класс, который получает Flowable<Item> f2, мне нужно получить значения из него без каких-либо изменений данных (сохраняет значения в локальном кэше). Затем объедините его с другими Flowable f1 и отправьте в класс более высокого уровня. Можно ли выдавать значения только один раз из f2?

Также, как я могу выполнить действие со всеми Предметами, поступающими с Flowable f1, но после n Предметов создайте новый Flowable f2 из f1.

1 Ответ

0 голосов
/ 28 мая 2019

Для вашего первого вопроса, doOnNext(), вероятно, то, что вы ищете (http://reactivex.io/RxJava/2.x/javadoc/io/reactivex/Flowable.html#doOnNext-io.reactivex.functions.Consumer-).

 private static void main() {
    Flowable<String> f2 = Flowable.just("a", "b", "c", "d", "e");
    Flowable<String> f1 = Flowable.just("z", "x", "y");

    f2.doOnNext(n -> System.out.println("saving " + n))
      .concatWith(f1)
      .subscribe(System.out::println);

    Flowable.timer(10, SECONDS) // Just to block the main thread for a while
            .blockingSubscribe();
}

Для вашего второго вопроса, это зависит от того, хотите ли вы избавиться от предметов после n-го1. Если это так, вы можете использовать take(), в противном случае вы можете посмотреть на buffer().

    public static void main(String[] args) {
    Flowable<String> f1 = Flowable.just("a", "b", "c", "d", "e");
    Flowable<String> f2 = Flowable.just("z", "x", "y");


    f1.doOnNext(n -> System.out.println("action on " + n))
      .take(3)
      .subscribe(System.out::println);

    System.out.println("------------------------");
    System.out.println("Other possible use case:");
    System.out.println("------------------------");

    f1.doOnNext(n -> System.out.println("another action on " + n))
      .buffer(3)
      .flatMap(l -> Flowable.fromIterable(l).map(s -> "Hello " + s))
      .subscribe(System.out::println);

    Flowable.timer(10, SECONDS) // Just to block the main thread for a while
            .blockingSubscribe();
}

Вы можете взглянуть на Javadoc RxJava Flowable (http://reactivex.io/RxJava/2.x/javadoc/index.html?io/reactivex/Flowable.html). В нем много операторов, и мраморные диаграммы очень хорошо объясняют, что делает каждый оператор.

...