These code snippets do the job:
Solution 1 (simplest approach):
public static Collection<Integer> sumCollectionElements(Collection<Integer> L1, Collection<Integer> L2) {
    final Iterator<Integer> iterator = L2.iterator();
    return L1.stream()
            .limit(Math.min(L1.size(), L2.size()))
            .map(integer -> integer + iterator.next())
            .collect(Collectors.toList());
}
Solution 2 (more general approach -> gist):
public static <A, B, C> Stream<C> zip(Stream<A> streamA, Stream<B> streamB, BiFunction<A, B, C> zipper) {
    final Iterator<A> iteratorA = streamA.iterator();
    final Iterator<B> iteratorB = streamB.iterator();
    final Iterator<C> mergedIterator = new Iterator<C>() {
        @Override
        public boolean hasNext() {
            return iteratorA.hasNext() && iteratorB.hasNext();
        }
        @Override
        public C next() {
            return zipper.apply(iteratorA.next(), iteratorB.next());
        }
    };
    return iteratorToFiniteStream(mergedIterator);
}
public static <T> Stream<T> iteratorToFiniteStream(Iterator<T> iterator) {
    final Iterable<T> iterable = () -> iterator;
    return StreamSupport.stream(iterable.spliterator(), false);
}