示例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循环还会通过那些新添加的元素吗?那将消除我对递归方法的需要。
另一个问题是,程序中是否会延迟处理在流中创建的对象(例如streamL的forEach循环中的Test test2 = new Test();
)?换句话说,这个对象会在内存堆中占据任何位置吗? (但是这个问题并不重要,主要是我的第一个问题)
答案 0 :(得分:1)
您可以先将forEach
替换为flatMap
,然后使用Stream.builder()
创建包含附加元素和重用的t
元素的子流:
Stream.of("A1", "A2").flatMap(t -> {
Stream.Builder<String> subStream = Stream.builder();
subStream.add(t);
for (int i = 1; i < 3; i++) {
subStream.add("B" + i);
}
return subStream.build();
}).forEach(System.out::print);
打印
A1B1B2A2B1B2