gpt4 book ai didi

java - 在 Java 中使用流初始化二维数组

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:41:26 24 4
gpt4 key购买 nike

我有以下类(class):

public class MyClass {
//...
public MyClass(int x, int y) {
//...
}
}

现在,我需要用项目初始化二维数组:

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

我看过这个例子,但它在我的情况下不起作用:Java 8 Stream and operation on arrays .他们使用单个 IntStream

问题:我当然可以使用嵌套的 for 循环,但我认为它现在已经过时了,正在考虑中。那么如何应用流 api 并以 Java 8 方式初始化它呢?

最佳答案

Streams 不太擅长跟踪索引,而这是您需要的。所以你可以像@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)));

你甚至可以让它看起来更实用并摆脱 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);

但老实说,for 循环并没有过时:

for (int r = 0; r < rows; r++) {
for (int c = 0; c < cols; c++) {
array[r][c] = new MyClass(r, c);
}
}

关于java - 在 Java 中使用流初始化二维数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37077322/

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