stream流取出实体类的指定属性存在重复数据的数据集合
//拿到重复的sid
Map<String, Long> collect = examineList
.stream()
.map(Examine::getSid)
.collect(Collectors.groupingBy(Function.identity(), Collectors.counting()));
List<String> repeatedNoList = new ArrayList<>();
collect.forEach((k, v) -> {
if (v > 1)
repeatedNoList.add(k);
});
stream对重复的数据进行处理(可根据自己需求进行更改)
//对重复的sid的数据进行处理(取最新的数据)
for (String repeatedNo : repeatedNoList) {
List<Examine> repeatedList = examineList.stream().filter(item -> repeatedNo.equals(item.getSid())).sorted((o1, o2) -> {
SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
try {
Date dt1 = format.parse(o1.getLabDateTime());
Date dt2 = format.parse(o2.getLabDateTime());
// 默认降序, 升序的话 把 dt1 和 dt2 调换位置
return Long.compare(dt2.getTime(), dt1.getTime());
} catch (Exception e) {
e.printStackTrace();
}
return 0;
}).collect(Collectors.toList());
//先移除,后添加最新的一条数据
if (!CollectionUtils.isEmpty(repeatedList)) {
examineList.removeIf(next -> next.getSid().equals(repeatedNo));
examineList.add(repeatedList.get(0));
}
}
PS: 其中examineList是我从Oracle中直接查的数据,使用的时候换成你要去重的那个list,实体类和字段也根据自己的需求进行变更。