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.

```java
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;

```java
Flux.range(1, 50)
    .filterOr(evenNumberPredicate, i -> queue.offer(i))
    .subscribe(System.out::println);

```

Any ideas? thank you.