java - 从二维数组或矩阵中删除重复项

标签 java arrays java-stream

我下面有二维数组

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 

我尝试过,我已将一维数组传递给我的自定义函数,该函数会将一维数组转换为二维数组,最终输出是 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)));

现在我想将其收集为二维数组,是否有更好的方法,请建议。

最佳答案

您必须对每个数组使用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]]

关于java - 从二维数组或矩阵中删除重复项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64301388/

相关文章:

c++ - 从数组中查找平均值

java - 在 Java 8 中是否有一种简洁的方法来迭代带有索引的流?

java - 在任何方向连续滚动一个大的无缝图像

Java力场继承

c - 在c中打印新的字符数组(奇怪的符号)

java - 使用java并行流在非同步ArrayList中添加元素

java - 在 Java8 parallelStream() 中使用 I/O + ManagedBlocker 有什么问题吗?

java - 更新 recyclerview 中的特定项目

java - 从java程序调用C编译器

javascript - 使用 Google Apps 脚本从数组中获取最后一个值