code: public static <T, R1, R> Optional<R> forEach2(Optional<? extends T> value1, Function<? super T, Optional<R1>> value2,
                                                   BiFunction<? super T, ? super R1, ? extends R> yieldingFunction) {
  
          return value1.flatMap(in -> {
  
              Optional<R1> a = value2.apply(in);
              return a.map(in2 -> yieldingFunction.apply(in,  in2));
              });
  
  
  
      }
docs: Perform a For Comprehension over a Optional, accepting a generating function.
  This results in a two level nested internal iteration over the provided Optionals.
  
  <pre>
  {@code
  
  import static com.oath.cyclops.reactor.Optionals.forEach;
  
  forEach(Optional.just(1),
  a-> Optional.just(a+1),
  Tuple::tuple)
  
  }
  </pre>
  
  @param value1 top level Optional
  @param value2 Nested Optional
  @param yieldingFunction Generates a result per combination
  @return Optional with a combined value generated by the yielding function