从2D阵列或矩阵中删除重复项

时间:2020-10-11 06:55:54

标签: java arrays java-stream

我下面有2D阵列

5.0 5.0 100 99 
5.5 5.5 101 100 
6.0 6.0 102 101

我想要下面的预期输出

5.0 100 99 
5.5 101 100  
6.0 102 101 

我尝试过的是,我已将1D数组传递给自定义函数,该函数会将1d转换为2D数组,最终输出为finalArr,我将其进一步传递给stream函数并映射作为列表并找到不同的

String finalArr[][] = convert1DTo2DArray(arr3, 3, 4);

Arrays.stream(finalArr)
        .map(Arrays::asList)
        .distinct()
        .forEach(row -> System.out.printf("%-3s%-7s%s\n", row.get(0), row.get(1), row.get(2)));

输出:

5.05.0    100
5.55.5    101
6.06.0    102

一些解决方法后,我设法做到了

5.0 100 99 
5.5 101 100  
6.0 102 101

通过此代码:

 Arrays.stream(finalArr)
             .map(Arrays::asList)
             .distinct()
             .forEach(row -> System.out.printf("%-5s%-7s%s\n", row.get(1), row.get(2), row.get(3)));

现在,我想将其收集为2D数组,请提出相同的更好的方法。

1 个答案:

答案 0 :(得分:3)

每个数组必须使用distinct(),您可以使用:

解决问题
String[][] result = Arrays.stream(finalArr)
        .map(s -> Arrays.stream(s).distinct().toArray(String[]::new))
        .toArray(String[][]::new);

输出

[[5.0, 100, 99], [5.5, 101, 100], [6.0, 102, 101]]