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));
    }
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 ) ) ; }
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