static <T1, T2, T3, T4, R> Seq<R> zipAll(Iterable<? extends T1> s1, Iterable<? extends T2> s2, Iterable<? extends T3> s3, Iterable<? extends T4> s4, T1 default1, T2 default2, T3 default3, T4 default4, Function4<? super T1, ? super T2, ? super T3, ? super T4, ? extends R> zipper) {
        return zipAll(seq(s1), seq(s2), seq(s3), seq(s4), default1, default2, default3, default4, zipper);
    }
Zip two streams into one - by storing the corresponding elements from them in a tuple,
when one of streams will end - a default value for that stream will be provided instead -
so the resulting stream will be as long as the longest of the two streams.
<p>
<pre><code>
// (tuple(1, "a"), tuple(2, "x"), tuple(3, "x"))
Seq.zipAll(Seq.of(1, 2, 3), Seq.of("a"), 0, "x")
</code></pre>
jOOL/src/main/java/org/jooq/lambda/Seq.java