Пример 1:
public TailCall<TestClass> useOfStream(Stream<Test> streamL) {
ArrayList<Test> testList2 = new ArrayList<>();
Stream<Test> streamL2 = testList2.stream();
streamL.forEach(test -> {
for (int i = 1; i < 14; i++) {
if (/*insert if statement*/) {
Test test2 = new Test();
Stream<Test> streamT = stream.of(test2);
**streamL2.concat(streamL2, streamT);**
} else {
//do something with TestClass
}
}
});
if (streamL2.findAny().isPresent()) {
return call(() -> useOfStream(streamL2));
} else {
return TailCalls.done(TestClass);
}
}
Итак, для определенного элемента в streamL
я могу сделать до 13 элементов одного класса.Эти новые элементы (которые я добавил в streamL2
) должны повторяться так же, как streamL
.Есть ли возможность добавить эти новые элементы в streamL
?Выполнение:
streamL.forEach(test -> {
for (int i = 1; i < 14; i++) {
if (/*insert if statement*/) {
Test test2 = new Test();
Stream<Test> streamT = stream.of(test2);
**streamL.concat(streamL, streamT);**
} else {
//do something with TestClass
}
}
});
Если даже возможно объединить поток в свой собственный цикл for-Each, будет ли цикл forEach также проходить через эти вновь добавленные элементы?Это избавило бы меня от необходимости рекурсивного метода.Другой вопрос, будет ли программа лениво обрабатывать объект, созданный в потоке (например, Test test2 = new Test();
в цикле forEach в streamL)?Другими словами, будет ли этот объект занимать какое-то место в куче памяти?(но этот вопрос не так важен, в первую очередь мой первый вопрос)