У меня есть этот код с каркасом реактора проекта, но это относится и к rxjava1, только что проверил его (предположительно для rxjava2), и я не могу найти причину, по которой оператор zipWith()
оценивает свой параметр как текущий, даже если события отфильтрованызаранее и используется defer()
.
import reactor.core.publisher.Flux;
public class TestLazy {
public static void main(String[] args) {
Flux.just(1, 2, 3)
.filter(s -> s > 4)
.zipWith(Flux.defer(() -> Flux.just(get1(), get2(), get3())), (a, b) -> a + b)
.subscribe(System.out::println);
Flux.just(1, 2, 3)
.filter(s -> s > 4)
.flatMap(a -> Flux.defer(() -> Flux.just(fromFlatMap())))
.subscribe(System.out::println);
}
private static int fromFlatMap() {
System.out.println("from flatMap");
return 0;
}
private static int get1() {
System.out.println("get 1");
return 1;
}
private static int get2() {
System.out.println("get 2");
return 2;
}
private static int get3() {
System.out.println("get 3");
return 3;
}
}
Выход составляет
get 1
get 2
get 3
Для flatMap()
это не так.Почему это поведение?Спасибо