title: Cannot zip a flux and return null values. How can we discard an event pair passed into a flux?
body: <p>Say that you have a set of <code>Flux</code> that you would like to zip together with a bifunction.</p>
  
  <pre><code>Flux&lt;String&gt; flux1 = Flux.just("A", "B", "C");
  Flux&lt;String&gt; flux2 = Flux.just("D", "E", "F");
  Flux.zip(flux1, flux2, this::zipString).subscribe(System.out::println);
  </code></pre>
  
  <blockquote>
    <p>This bifunction below will return <code>null</code> if an object meets a certain constraint. So that we can possibly apply a filter after zipping the <code>Flux</code> together.</p>
  </blockquote>
  
  <pre><code>public String zipString(String a, String b) {
      if (a.equals("B"))
          return null;
      return a + b;
  }
  </code></pre>
  
  <p>This strategy will end up throwing a <code>NullPointerException</code>.</p>
  
  <pre><code>Exception in thread "main" 
  reactor.core.Exceptions$ErrorCallbackNotImplemented: java.lang.NullPointerException: The zipper returned a null value
  Caused by: java.lang.NullPointerException: The zipper returned a null value
      at java.util.Objects.requireNonNull(Objects.java:228)
      at reactor.core.publisher.FluxZip$ZipCoordinator.drain(FluxZip.java:711)
      at reactor.core.publisher.FluxZip$ZipInner.onSubscribe(FluxZip.java:861)
      at reactor.core.publisher.FluxArray.subscribe(FluxArray.java:53)
      at reactor.core.publisher.FluxArray.subscribe(FluxArray.java:59)
  </code></pre>
  
  <p>EDIT: On a side note this will also occur will occur when you have a <code>Flux</code> containing a null.</p>
  
  <pre><code>Flux&lt;String&gt; flux2 = Flux.just(null, "B", "C");
  </code></pre>
  
  <p>So this leads me to ask. Why are <code>null</code> values prohibited from entering a Flux?</p>
  
  <p>What are some potential strategies to mitigate the use case below:</p>
  
  <blockquote>
    <p>flux2 contains a value that we should discard, therefore the set should be discarded.</p>
  </blockquote>