Ang*_*isi 7 java arrays functional-programming java-8 java-stream
我是Java 8的新手,目前还没有完全掌握Streams,是否可以使用Stream功能操作来填充数组?这是一个示例代码,说明如何使用标准for循环:
public static void testForLoop(){
String[][] array = new String[3][3];
for (int x = 0; x < array.length; x++){
for (int y = 0; y < array[x].length; y++){
array[x][y] = String.format("%c%c", letter(x), letter(y));
}
}
}
public static char letter(int i){
return letters.charAt(i);
}
Run Code Online (Sandbox Code Playgroud)
如果有可能我如何使用Stream?如果可能,它是否方便(性能和可读性)?
Luk*_*tor 13
在这里,您有一个生成数组的解决方案,而不是修改以前定义的变量:
String[][] array =
IntStream.range(0, 3)
.mapToObj(x -> IntStream.range(0, 3)
.mapToObj(y -> String.format("%c%c", letter(x), letter(y)))
.toArray(String[]::new))
.toArray(String[][]::new);
Run Code Online (Sandbox Code Playgroud)
如果你想使用并行流,那么避免像变量(数组或对象)的修改这样的副作用是非常重要的.它可能会导致竞争条件或其他并发问题.您可以在java.util.stream包文档中阅读更多相关信息- 请参阅非干扰,无状态行为和副作用部分.