Kkh*_*Kkh 1 java arrays lambda declarative-programming java-stream
我正在尝试使用 java 流 API 将两个二维数组的元素相互添加。
我用一维数组解决了这个问题,但我不知道如何进一步处理二维数组。
这是要转换的代码:
public static int[][] add(final int[][] m1, final int[][] m2) {
int[][] e = new int[m2.length][m2[0].length];
for (int i = 0; i < m1.length; i++) {
for (int j = 0; j < m1[i].length; j++) {
e[i][j] = m1[i][j] + m2[i][j];
}
}
return e;
}
Run Code Online (Sandbox Code Playgroud)
这是我为相同目的编写的代码,但仅使用一维数组:
public static int[] addOneDimension(final int[] a, final int b[]) {
int[] c = IntStream.range(0, a.length)
.map(i -> a[i] + b[i])
.toArray();
return c;
}
Run Code Online (Sandbox Code Playgroud)
特别是不知道如何map()在二维数组上使用该 方法。
这可以使用IntStream及其方法mapToObj来处理行和map处理每行中的元素来实现:
static int[][] add(int[][] a, int [][] b) {
return IntStream.range(0, a.length)
.mapToObj(i -> add(a[i], b[i])) // int[] is object
.toArray(int[][]::new); // create new 2D array
}
static int[] add(int[] a, int[] b) {
return IntStream.range(0, a.length)
.map(i -> a[i] + b[i]) // processing int operands
.toArray(); // IntStream.toArray() returns int[]
}
Run Code Online (Sandbox Code Playgroud)
测试
int[][] a = {
{1, 2},
{3, 4}
};
int[][] b = {
{10, 20},
{30, 40}
};
System.out.println("Sum of a + b = ");
Arrays.stream(add(a, b))
.map(Arrays::toString)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
输出
Sum of a + b =
[11, 22]
[33, 44]
Run Code Online (Sandbox Code Playgroud)
单方法实现可能如下:
int[][] a = {
{1, 2},
{3, 4}
};
int[][] b = {
{10, 20},
{30, 40}
};
System.out.println("Sum of a + b = ");
Arrays.stream(add(a, b))
.map(Arrays::toString)
.forEach(System.out::println);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |