将嵌套循环转换为流Java 8
我正在尝试将下面的嵌套循环转换为streams Java 8 newself2中的每个元素都是字符串列表-[“1 2”,“3 4”]需要更改为[“1”,“2”,“3”,“4”] 现在我知道了如何将内部for循环中的拆分数组添加到将嵌套循环转换为流Java 8,java,loops,java-8,java-stream,Java,Loops,Java 8,Java Stream,我正在尝试将下面的嵌套循环转换为streams Java 8 newself2中的每个元素都是字符串列表-[“1 2”,“3 4”]需要更改为[“1”,“2”,“3”,“4”] 现在我知道了如何将内部for循环中的拆分数组添加到x的新列表中 非常感谢您的帮助。以下是我的做法: List<List<String>> result = newself2.stream() .map(list -> list.stream() .flatMa
x
的新列表中
非常感谢您的帮助。以下是我的做法:
List<List<String>> result = newself2.stream()
.map(list -> list.stream()
.flatMap(string -> Arrays.stream(string.split(" ")))
.collect(Collectors.toList()))
.collect(Collectors.toList());
List result=newself2.stream()
.map(list->list.stream()
.flatMap(字符串->数组.stream(字符串.split(“”))
.collect(收集器.toList())
.collect(Collectors.toList());
这是另一种解决方案
Function<List<String>,List<String>> function = list->Arrays.asList(list.stream()
.reduce("",(s, s2) -> s.concat(s2.replace(" ",",")+",")).split(","));
首先谢谢你的回答!它工作得很好!但我仍然想知道——因为我是新手——这是做这件事的最佳方式吗?PaulAlwin streams是否有可能加快速度?@PaulAlwin streams有一些开销,因为他们需要创建所有内部基础设施来完成工作。因此,for通常具有更好的性能。另一方面,流很容易并行化,并且扩展得更好。关于我的解决方案的复杂性,它与你的解决方案相同,即与空间分隔元素的数量成线性关系。
List<List<String>> result = newself2.stream()
.map(list -> list.stream()
.flatMap(string -> Arrays.stream(string.split(" ")))
.collect(Collectors.toList()))
.collect(Collectors.toList());
Function<List<String>,List<String>> function = list->Arrays.asList(list.stream()
.reduce("",(s, s2) -> s.concat(s2.replace(" ",",")+",")).split(","));
List<List<String>> finalResult = lists
.stream()
.map(function::apply)
.collect(Collectors.toList());
List<List<String>> finalResult = new ArrayList<>();
for (List<String> list : lists) {
String acc = "";
for (String s : list) {
acc = acc.concat(s.replace(" ", ",") + ",");
}
finalResult.add(Arrays.asList(acc.split(",")));
}