code: public static <A, B, C, R> Stream<R> zip(final Stream<? extends A> a, final Stream<? extends B> b, final Stream<? extends C> c, final A valueForNoneA,
              final B valueForNoneB, final C valueForNoneC, final TriFunction<? super A, ? super B, ? super C, R> zipFunction) {
          return zip(a.iterator(), b.iterator(), c.iterator(), valueForNoneA, valueForNoneB, valueForNoneC, zipFunction)
                  .onClose(newCloseHandler(N.asList(a, b, c)));
      }
docs: Zip together the "a", "b" and "c" iterators until all of them runs out of values.
  Each triple of values is combined into a single value using the supplied zipFunction function.
  
  @param a
  @param b
  @param c
  @param valueForNoneA value to fill if "a" runs out of values.
  @param valueForNoneB value to fill if "b" runs out of values.
  @param valueForNoneC value to fill if "c" runs out of values.
  @param zipFunction
  @return