I'm using reactor-core:3.3.0.RELEASE and want to retain some elements of Flux that filtered out by a Predicate.
I just came up with the following code, however, I know it's not efficient and looks awkward because it applies Predicate twice.
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
I'd like to code something like this;
Flux.range(1, 50)
.filterOr(evenNumberPredicate, i -> queue.offer(i))
.subscribe(System.out::println);
Any ideas? thank you.