code: public static <T1, T2, R> Optional<R> zip(final Publisher<? extends T2> p, final Optional<? extends T1> f,
              final BiFunction<? super T1, ? super T2, ? extends R> fn) {
          return narrow(Maybe.fromOptional(f)
                             .zip(fn, p)
                             .toOptional());
      }
docs: Combine an Optional with the provided Publisher (selecting one element if present) using the supplied BiFunction
  <pre>
  {@code
  Optionals.zip(Flux.just(10),Optional.of(10), this::add)
  //Optional[30]
  
  private int add(int a, int b) {
  return a + b;
  }
  
  }
  </pre>
  
  @param p Publisher to combine
  @param f  Optional to combine with
  @param fn Combining function
  @return Optional combined with supplied Publisher, or zero Optional if no value present