Class CartesianProduct<A,​B>

  • Type Parameters:
    A - The multiplicand Iterable element type
    B - The multiplier Iterable element type
    All Implemented Interfaces:
    Fn1<java.lang.Iterable<A>,​Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>>, Fn2<java.lang.Iterable<A>,​java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>, Applicative<Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>,​Fn1<java.lang.Iterable<A>,​?>>, Cartesian<java.lang.Iterable<A>,​Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>,​Fn1<?,​?>>, Cocartesian<java.lang.Iterable<A>,​Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>,​Fn1<?,​?>>, Contravariant<java.lang.Iterable<A>,​Profunctor<?,​Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>,​Fn1<?,​?>>>, Functor<Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>,​Fn1<java.lang.Iterable<A>,​?>>, Profunctor<java.lang.Iterable<A>,​Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>,​Fn1<?,​?>>, Monad<Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>,​Fn1<java.lang.Iterable<A>,​?>>, MonadReader<java.lang.Iterable<A>,​Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>,​Fn1<java.lang.Iterable<A>,​?>>, MonadRec<Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>,​Fn1<java.lang.Iterable<A>,​?>>, MonadWriter<java.lang.Iterable<A>,​Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>,​Fn1<java.lang.Iterable<A>,​?>>

    public final class CartesianProduct<A,​B>
    extends java.lang.Object
    implements Fn2<java.lang.Iterable<A>,​java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>
    Lazily compute the cartesian product of an Iterable<A> and Iterable<B>, returning an Iterable<Tuple2<A, B>>, the products as tuples of multiplicand As and multiplier Bs.

    Note that this algorithm exhaustively pairs all elements from Iterable<B> to the first element of Iterable<A> before advancing to the next element of Iterable<A>, so if Iterable<B> is infinite, only one element from Iterable<A> will ever be paired.

    See Also:
    Zip
    • Constructor Detail

      • CartesianProduct

        private CartesianProduct()
    • Method Detail

      • checkedApply

        public java.lang.Iterable<Tuple2<A,​B>> checkedApply​(java.lang.Iterable<A> as,
                                                                  java.lang.Iterable<B> bs)
        Specified by:
        checkedApply in interface Fn2<java.lang.Iterable<A>,​java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>>
      • cartesianProduct

        public static <A,​B> CartesianProduct<A,​B> cartesianProduct()
      • cartesianProduct

        public static <A,​B> Fn1<java.lang.Iterable<B>,​java.lang.Iterable<Tuple2<A,​B>>> cartesianProduct​(java.lang.Iterable<A> as)
      • cartesianProduct

        public static <A,​B> java.lang.Iterable<Tuple2<A,​B>> cartesianProduct​(java.lang.Iterable<A> as,
                                                                                         java.lang.Iterable<B> bs)