code: public static <T, R> Stream<R> zip(final Collection<? extends Stream<? extends T>> c, final Function<? super List<? extends T>, R> zipFunction) {
          if (N.isNullOrEmpty(c)) {
              return Stream.empty();
          }
  
          final int len = c.size();
          final List<Iterator<? extends T>> iterList = new ArrayList<>(len);
  
          for (Stream<? extends T> e : c) {
              iterList.add(e.iterator());
          }
  
          return zipp(iterList, zipFunction).onClose(newCloseHandler(c));
      }
docs: Zip together the iterators until one of them runs out of values.
  Each array of values is combined into a single value using the supplied zipFunction function.
  
  @param c
  @param zipFunction
  @return