crossWith()
Cross every element of the input stream with every element of the given source, emitting them to the output stream as a
Pair<INPUT, CROSS>
.Implementation Notes
This gather pairs up each element of the input stream with some source of other elements, which do not have to be of the same type. While it is possible
to have the source
of elements be empty, the resulting output stream would be too so it is not recommended (this condition is not checked). It is also possible
for the source
to be infinite, which would pair a single element from the input with whatever the source
produces, which may make sense in a narrow set of cases
(the implementation does not check for this condition).
Signatures
Note there are four possible types for the soruce
of crossing elements.
crossWith(Iterator<CROSS> source)
crossWith(Iterable<CROSS> source)
crossWith(Stream<CROSS> source)
crossWith(CROSS... source)
source
Must be non-null
Examples
Cross the input stream with an Iterator
final Stream<String> input = Stream.of("A", "B", "C");
final Iterator<Integer> cross = List.of(1, 2, 3).iterator();
input
.gather(Gatherers4j.crossWith(cross))
.toList();
// [
// Pair("A", 1), Pair("A", 2), Pair("A", 3),
// Pair("B", 1), Pair("B", 2), Pair("B", 3),
// Pair("C", 1), Pair("C", 2), Pair("C", 3)
// ]
Cross the input stream with an Iterable
final Stream<String> input = Stream.of("A", "B", "C");
final Iterable<Integer> cross = List.of(1, 2, 3); // `List` implements `Iterable`
input
.gather(Gatherers4j.crossWith(cross))
.toList();
// [
// Pair("A", 1), Pair("A", 2), Pair("A", 3),
// Pair("B", 1), Pair("B", 2), Pair("B", 3),
// Pair("C", 1), Pair("C", 2), Pair("C", 3)
// ]
Cross the input stream with another Stream
final Stream<String> input = Stream.of("A", "B", "C");
final Stream<Integer> cross = Stream.of(1, 2, 3);
input
.gather(Gatherers4j.crossWith(cross))
.toList();
// [
// Pair("A", 1), Pair("A", 2), Pair("A", 3),
// Pair("B", 1), Pair("B", 2), Pair("B", 3),
// Pair("C", 1), Pair("C", 2), Pair("C", 3)
// ]
Cross the input stream with a source provided as varargs
final Stream<String> input = Stream.of("A", "B", "C");
input
.gather(Gatherers4j.crossWith(1, 2, 3))
.toList();
// [
// Pair("A", 1), Pair("A", 2), Pair("A", 3),
// Pair("B", 1), Pair("B", 2), Pair("B", 3),
// Pair("C", 1), Pair("C", 2), Pair("C", 3)
// ]