code: public static <T1, T2, T3, T4, R> Function<Tuple4<T1, T2, T3, T4>, R> function(Function4<T1, T2, T3, T4, R> function) {
          return tuple -> function.apply(tuple.getT1(), tuple.getT2(), tuple.getT3(), tuple.getT4());
      }
docs: Returns a {@link Function} of {@link Tuple4} that wraps a function of the component values of the tuple
  
  @param function the component value function
  @param <T1>     the type of the first value
  @param <T2>     the type of the second value
  @param <T3>     the type of the third value
  @param <T4>     the type of the fourth value
  @param <R>      the type of the result of the function
  @return the wrapper function