gpt4 book ai didi

java - 如何修复嵌套映射函数的 "Stream has already been operated upon or closed” 错误

转载 作者:行者123 更新时间:2023-12-02 09:40:04 27 4
gpt4 key购买 nike

当我尝试在两个流上执行函数并产生一个结果时,我遇到了“流已被操作或关闭”的情况。

我已经尝试使用 StreamSupplier,但似乎它不能解决问题,如果我将两个流转换为字符串列表并执行嵌套循环,它确实可以解决。但我想看看对此的流解决方案是什么。

我当前的代码是

String[] str1 = new String[]{"A","B","C"};
String[] str2 = new String[]{"a","b","c"};
private Stream<String> method(final Stream<String> str1,
final Stream<String> str2) {
return str1
.flatMap(s1 -> str2
.map(s2 -> simpleStringConcatFunction_1(s1) + simpleStringConcatFunction_2(s2));

假设 s1 是一个包含 3 个元素的字符串列表,s2 也是如此。输出应为 9 个元素。就像

啊,抗体,交流电,巴,BB,公元前,钙,CB,抄送

我使用双循环实现了这些,代码是

private Stream<String> generateFilePatterns(final Stream<String> str1,
final Stream<String> str2) {
List<String> list1 = str1.collect(Collectors.toList());
List<String> list2 = str2.collect(Collectors.toList());
List<String> list = new ArrayList<>();
for( String s1 : list1){
for(String s2 : list2){
list.add(simpleStringConcatFunction_1(s1) + simpleStringConcatFunction_2(s2);
}
}
return list.stream();
}

最佳答案

执行非流代码中操作的一半,即拍摄 str2 的快照,以便您可以多次流式传输:

List<String> list2 = str2.collect(Collectors.toList());
return str1.flatMap(s1 -> list2.stream()
.map(s2 -> simpleStringConcatFunction_1(s1) +
simpleStringConcatFunction_2(s2)));

关于java - 如何修复嵌套映射函数的 "Stream has already been operated upon or closed” 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57150655/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com