Я использую реактор с активной зоной: 3.3.0.RELEASE и хочу сохранить некоторые элементы Flux, отфильтрованные по предикату.
Я только что придумал следующий код, однако я знаю,это неэффективно и выглядит неловко, потому что он применяет Predicate дважды.
Queue<Integer> queue = Queues.<Integer> small().get();
Predicate<Integer> evenNumberPredicate = i -> i % 2 == 0;
Flux.range(1, 50)
.map(i -> {
if (!evenNumberPredicate.test(i)) {
queue.offer(i); // odd numbers are queued: want to use them later
}
return i;
})
.filter(evenNumberPredicate)
.subscribe(System.out::println); // even numbers are printed
Я хотел бы написать что-то вроде этого;
Flux.range(1, 50)
.filterOr(evenNumberPredicate, i -> queue.offer(i))
.subscribe(System.out::println);
Есть идеи? спасибо.