java - 在二维数组中选择最小 ID 时删除重复行
问题描述
我有以下二维数组:
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。对于我给定的二维数组,输出应该是:
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)));
}
解决方案
真正的 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)));
推荐阅读
- kubernetes-helm - 在 Helm 图表中使用 Requirements.lock 文件
- windows - 订购标准错误和标准输出或刷新标准错误
- javascript - 如何在 Angular 2+ 项目中使用 intl-tel-input 插件 utilsscript?
- sql - 在 PL SQL Loop 上获取行
- jaxb - JAXB 动态 XML 根类名
- php - PHP 通知页面 - 表格不显示结果
- python - 从顺序 Keras 模型中保存特定层
- python - Keras 假形,
- java - StringBuilder 会将字符串放入字符串常量池吗?
- python - python dbf查询日期时间的最佳方式?