code: public static <R> Stream<R> zip(final IntIterator a, final IntIterator b, final IntBiFunction<R> zipFunction) {
          return new IteratorStream<>(new ObjIteratorEx<R>() {
              @Override
              public boolean hasNext() {
                  return a.hasNext() && b.hasNext();
              }
  
              @Override
              public R next() {
                  return zipFunction.apply(a.nextInt(), b.nextInt());
              }
          });
      }
docs: Zip together the "a" and "b" iterators until one of them runs out of values.
  Each pair of values is combined into a single value using the supplied zipFunction function.
  
  @param a
  @param b
  @return