Для вашего первого вопроса, 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). В нем много операторов, и мраморные диаграммы очень хорошо объясняют, что делает каждый оператор.