在2d数组中选择最小id时删除重复行

am46iovg  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(353)

关闭。这个问题需要细节或清晰。它目前不接受答案。
**想改进这个问题吗?**通过编辑这个帖子来添加细节并澄清问题。

上个月关门了。
改进这个问题
我有以下2d数组:

ID  Site  Place
1.0 222.23 333.23
2.0 222.0  311.11
3.0 22.23  111.2
0.0 222.23 333.23
4.0 22.23  121.1
1.0 222.23 333.23
5.0 222.23 333.23

我要删除具有相同站点和位置的所有行,并选择最小的id。对于给定的2d数组,输出应为:

ID  Site  Place
2.0 222.0  311.11
3.0 22.23  111.2
0.0 222.23 333.23
4.0 22.23  121.1

我试过这样做,但是时间太长了。我还创建了另一种方法(见下面的代码),但只删除精确的副本。一个简单的解释代码片段将不胜感激。

public static void main(String[]args){
        Double[][] loc_t = {
                {1.0,222.23,333.23},
                {2.0, 222.00, 311.11},
                {3.0, 22.23, 111.2},
                {0.0, 222.23, 333.23},
                {4.0, 22.23, 121.1},
                {1.0, 222.23, 333.23},
                {5.0, 222.23, 333.23},

 };
        System.out.println("ID Site  Place");
        Arrays.stream(loc_t)
              .map(Arrays::asList)
              .distinct()
              .forEach(row -> System.out.printf("%-3s%-7s%s\n", row.get(0), row.get(1), row.get(2)));
}
jv4diomz

jv4diomz1#

确实,distinct只会确保值是唯一的,因此无法删除重复项。
下面收集项目并计数数字'filter(e->e.getvalue()==1)'确保流输出中只允许计数为1的项目进行收集。

Arrays.stream(loc_t)
            .map(Arrays::asList)
            .collect(Collectors.groupingBy(Function.identity(), Collectors.counting()))
            .entrySet()
            .stream()
            .filter(e -> e.getValue() == 1)
            .map(e -> e.getKey())
            .collect(Collectors.toList())
            .forEach(row -> System.out.printf("%s, %s, %s\n", row.get(0), row.get(1), row.get(2)));

相关问题