code: public final Flux<T> filterWhen(Function<? super T, ? extends Publisher<Boolean>> asyncPredicate,
  			int bufferSize) {
  		return onAssembly(new FluxFilterWhen<>(this, asyncPredicate, bufferSize));
  	}
docs: Test each value emitted by this {@link Flux} asynchronously using a generated
  {@code Publisher<Boolean>} test. A value is replayed if the first item emitted
  by its corresponding test is {@literal true}. It is dropped if its test is either
  empty or its first emitted value is {@literal false}.
  <p>
  Note that only the first value of the test publisher is considered, and unless it
  is a {@link Mono}, test will be cancelled after receiving that first value. Test
  publishers are generated and subscribed to in sequence.
  
  <p>
  <img class="marble" src="doc-files/marbles/filterWhenForFlux.svg" alt="">
  
  @reactor.discard This operator discards elements that do not match the filter. It
  also discards elements internally queued for backpressure upon cancellation or error triggered by a data signal.
  
  @param asyncPredicate the function generating a {@link Publisher} of {@link Boolean}
  for each value, to filter the Flux with
  @param bufferSize the maximum expected number of values to hold pending a result of
  their respective asynchronous predicates, rounded to the next power of two. This is
  capped depending on the size of the heap and the JVM limits, so be careful with
  large values (although eg. {@literal 65536} should still be fine). Also serves as
  the initial request size for the source.
  @return a filtered {@link Flux}