将嵌套循环转换为流 Java 8

Pau*_*win 2 java loops java-8 java-stream

我正在尝试将下面的嵌套循环转换为流 Java 8。

newself2中的每个元素都是一个字符串列表——["1 2","3 4"]需要改为["1","2","3","4"]。

for (List<String> list : newself2) {
    // cartesian = [["1 2","3 4"],["4 5","6 8"]...] list = ["1 2","3 4"]...
    List<String> clearner = new ArrayList<String>();
    for (String string : list) { //string = "1 3 4 5"
        for (String stringElement : string.split(" ")) {
            clearner.add(stringElement);
        }
    }
    newself.add(clearner);
    //[["1","2","3","4"],["4","5","6","8"]...]
}
Run Code Online (Sandbox Code Playgroud)

到目前为止我所尝试的 -

newself2.streams().forEach(list -> list.foreach(y -> y.split(" ")))  
Run Code Online (Sandbox Code Playgroud)

现在我确定如何将内部 for 循环中的拆分数组添加到新列表 for x?

任何帮助是极大的赞赏。

Fed*_*ner 6

这是我的做法:

List<List<String>> result = newself2.stream()
    .map(list -> list.stream()
            .flatMap(string -> Arrays.stream(string.split(" ")))
            .collect(Collectors.toList()))
    .collect(Collectors.toList());
Run Code Online (Sandbox Code Playgroud)

  • @PaulAlwin 流有一些开销,因为他们需要创建所有内部基础设施才能完成工作。所以 for 通常会有更好的性能。另一方面,流很容易并行化和扩展得更好。关于我的解决方案的复杂性,它与您的相同,即与空格分隔元素的数量成线性关系。 (2认同)