我有以下课程:
public class MyClass{
//...
public MyClass(int x, int y){
//...
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要使用项目初始化2d-array
int rows;
int cols;
//initializing rows and cols
MyClass[][] arr = new MyClass[rows][cols];
//how to initialize arr[x][y] with
//new MyClass(x, y) with streams API
Run Code Online (Sandbox Code Playgroud)
我看了一下这个例子,但它在我的情况下不起作用.他们使用单一IntStream
问题:当然我可以使用嵌套for循环,但我认为它现在是旧式的并且考虑不好.那么如何应用流api并以其Java8方式启动它?
流不是很好地跟踪索引,这是你需要的.所以你可以像@NicolasFilotto建议那样滥用它们,或者以更简单的方式:
MyClass[][] array = new MyClass[rows][cols];
IntStream.range(0, rows)
.forEach(r -> IntStream.range(0, cols)
.forEach(c -> array[r][c] = new MyClass(r, c)));
Run Code Online (Sandbox Code Playgroud)
你甚至可以让它看起来更实用,摆脱forEach突变部分:
MyClass[][] array = IntStream.range(0, rows)
.mapToObj(r -> IntStream.range(0, cols)
.mapToObj(c -> new MyClass(r, c))
.toArray(MyClass[]::new))
.toArray(MyClass[][]::new);
Run Code Online (Sandbox Code Playgroud)
但老实说,for循环不是过时的:
for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
array[r][c] = new MyClass(r, c);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1223 次 |
| 最近记录: |