java - Java 8 过滤列表中的重复对象
问题描述
我有一个数组列表:
List<EmpData> data;
class Emp {
Integer id;
String department;
String action;
// getters and setters
}
我得到的数据如下:
1, Food, Add
1, Food, Remove
2, Food, Add
2, Auto, Remove
3, Electric, Add
3, Electric, Remove
3, Food, Remove
我想删除 id & department 相同的所有记录。
那是对于 EmpId 1
there & department food
,有 2 条记录,所以删除它们。
这样,结果列表将仅包含:
2, Food, Add
2, Auto, Remove
3, Food, Remove
如何在 java 8 中过滤这个列表?
解决方案
好吧,您可以对其进行排序,然后删除所有后续内容:
var sorted = list.stream().sort(Comparator.comparing(EmpData::getId).thenComparing(EmpData::getDepartment)).collect(Collectors.toList());
for(int i = 0; i < sorted.size() - 1; i++){
var next = sorted.at( i + 1 );
var current = sorted.at( i );
if(current.getId().equals(next.getId()) && current.getDepartment().equals(next.getDepartment())){
sorted.remove(i);
i--; // check for next element
}
}
推荐阅读
- html - 滚动导航栏右侧透明?
- firebase - 如何按当前日期从 Cloud Firestore 获取数据?
- angular - 服务和构建命令的 Angular CLI 问题
- php - 用年份 php 对数组进行排序
- .net-core - 与连接到现有总线的消费者一起阅读消息
- xaml - 如何将这三个按钮放在底部的中心?
- python - 为什么我不断收到错误 root 无法找到由“1cccee45d6e7”标识的修订版?
- ios - 尝试使用 Xcode 构建应用程序时出现 React-native 错误
- python - 使用 keras 时,BN 层如何在 DCGAN 中工作?
- javascript - 如何使用 JSON 数据创建所需的 UI