Class CartesianProduct<A,B>

java.lang.Object
com.jnape.palatable.lambda.functions.builtin.fn2.CartesianProduct<A,B>
Type Parameters:
A - The multiplicand Iterable element type
B - The multiplier Iterable element type
All Implemented Interfaces:
Fn1<Iterable<A>, Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>>, Fn2<Iterable<A>, Iterable<B>, Iterable<Tuple2<A,B>>>, Applicative<Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>, Fn1<Iterable<A>, ?>>, Cartesian<Iterable<A>, Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>, Fn1<?,?>>, Cocartesian<Iterable<A>, Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>, Fn1<?,?>>, Contravariant<Iterable<A>, Profunctor<?, Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>, Fn1<?,?>>>, Functor<Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>, Fn1<Iterable<A>, ?>>, Profunctor<Iterable<A>, Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>, Fn1<?,?>>, Monad<Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>, Fn1<Iterable<A>, ?>>, MonadReader<Iterable<A>, Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>, Fn1<Iterable<A>, ?>>, MonadRec<Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>, Fn1<Iterable<A>, ?>>, MonadWriter<Iterable<A>, Fn1<Iterable<B>, Iterable<Tuple2<A,B>>>, Fn1<Iterable<A>, ?>>

public final class CartesianProduct<A,B> extends Object implements Fn2<Iterable<A>, Iterable<B>, 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: