code: public static <U, V, T> StreamEx<T> zip(List<U> first, List<V> second,
              BiFunction<? super U, ? super V, ? extends T> mapper) {
          return of(new RangeBasedSpliterator.ZipRef<>(0, checkLength(first.size(), second.size()), mapper, first, second));
      }
docs: Returns a sequential {@code StreamEx} containing the results of applying
  the given function to the corresponding pairs of values in given two
  lists.
  
  <p>
  The list values are accessed using {@link List#get(int)}, so the lists
  should provide fast random access. The lists are assumed to be
  unmodifiable during the stream operations.
  
  @param <U> the type of the first list elements
  @param <V> the type of the second list elements
  @param <T> the type of the resulting stream elements
  @param first the first list, assumed to be unmodified during use
  @param second the second list, assumed to be unmodified during use
  @param mapper a non-interfering, stateless function to apply to each pair
  of the corresponding list elements.
  @return a new {@code StreamEx}
  @throws IllegalArgumentException if length of the lists differs.
  @see EntryStream#zip(List, List)
  @since 0.2.1