Как я могу реализовать функцию с использованием Java 8 для принятия некоторого количества потоков и создать поток, в котором каждый элемент представляет собой список, состоящий из одного члена декартова произведения потоков?Поток декартова продукта других потоков, каждый элемент как список?
Я рассмотрел this question - этот вопрос использует агрегатор, который является BinaryOperator
(беря два элемента подобного типа и производя предметы того же типа). Я бы хотел, чтобы в конечном итоге элементы были List
s, а не типы элементов во входных потоках.
В частности, предположим, что мой искомую функцию называется product
следующее:
Stream<List<String>> result =
product(
Stream.of("A", "B", "C", "D"),
Stream.of("I", "J", "K),
Stream.of("Y", "Z")
);
result.forEach(System.out::println);
должен напечатать:
[A, I, Y]
[A, I, Z]
[A, J, Y]
[A, J, Z]
[A, K, Y]
[A, K, Z]
[B, I, Y]
...
[D, K, Y]
[D, K, Z]
В идеале я хотел бы, чтобы эта операция будет как можно ленивее. Например, если входные потоки создаются Stream.generate()
, было бы здорово, если бы поставщики этих потоков не выполнялись до тех пор, пока это не было абсолютно необходимо.
ли эта помощь? http://stackoverflow.com/a/40202722/5629413 –
Поток может быть использован только один раз, поэтому, если вы предоставляете 'product()' три одноразовых потока, тогда он должен будет хранить все значения двух из них, и в этом случае вам может быть лучше дать три объекта «Итерабельные», чтобы предотвратить дублирование входов. – Andreas
Это довольно сложно. В JDK нет ничего, чтобы поддержать это. Вам нужно будет написать код ... – Bohemian