static <T1, T2, T3, T4, T5, T6, T7, T8> Seq<Tuple8<T1, T2, T3, T4, T5, T6, T7, T8>> crossJoin(Seq<? extends T1> s1, Seq<? extends T2> s2, Seq<? extends T3> s3, Seq<? extends T4> s4, Seq<? extends T5> s5, Seq<? extends T6> s6, Seq<? extends T7> s7, Seq<? extends T8> s8) {

        // [#323] Some explicit type variable bindings required because of compiler regressions in JDK 9
        List<Tuple7<T2, T3, T4, T5, T6, T7, T8>> list = Seq.<T2, T3, T4, T5, T6, T7, T8>crossJoin(s2, s3, s4, s5, s6, s7, s8).toList();
        return s1.flatMap(v1 -> seq(list).map(t -> tuple(v1, t.v1, t.v2, t.v3, t.v4, t.v5, t.v6, t.v7)))
                 .onClose(SeqUtils.closeAll(s2, s3, s4, s5, s6, s7, s8));
    }
Cross join 8 streams into one.
<p>
<pre><code>
// (tuple(1, "a"), tuple(1, "b"), tuple(2, "a"), tuple(2, "b"))
Seq.of(1, 2).crossJoin(Seq.of("a", "b"))
</code></pre>
jOOL-java-8/src/main/java/org/jooq/lambda/Seq.java