List集合中的去重操作
前期准备:集合:List<equipment>
对象:equipment中有一name属性
需求:去掉集合对象中name属性相同的数据,保留一个属性相同的对象。
方案一:
1、创建一个新的空的集合,用于存放去重后的对象。
2、遍历原始的集合。
3、在遍历过程中,对于每个遍历到的对象,判断它的名称是否已经存在于新的集合中。
4、如果名称不存在于新的集合中,则将该对象添加到新的集合中。
5、如果名称已经存在于新的集合中,则跳过该对象,不做处理。
6、最后,新的集合中将只保留一个名称相同的对象,其他相同名称的对象都被去除了。
代码演示:
List<Equipment> originalList = ...; // 原始的集合
List<Equipment> deduplicatedList = new ArrayList<>();
for (Equipment equipment : originalList) {
boolean isDuplicate = false;
for (Equipment deduplicatedEquipment : deduplicatedList) {
if (equipment.getName().equals(deduplicatedEquipment.getName())) {
isDuplicate = true;
break;
}
}
if (!isDuplicate) {
deduplicatedList.add(equipment);
}
}
在上述示例代码中,originalList
是原始的列表,deduplicatedList
是去重后的列表。通过遍历原始列表,判断对象的名称是否已存在于去重后的列表中,如果不存在则添加到去重后的列表中。
方案二:
用Java8 中的Stream API 更简洁地解决去重操作
代码演示:
List<Equipment> originalList = ...; // 原始的集合
List<Equipment> deduplicatedList = originalList.stream()
.collect(Collectors.toMap(Equipment::getName, equipment -> equipment, (existing, replacement) -> existing))
.values()
.stream()
.collect(Collectors.toList());
在上述代码示例中,我们首先将原始的集合转换为流,然后使用 collect
方法结合 Collectors.toMap
来去重,最后再转回为列表。
使用 Stream API 的好处是,它提供了一种更加函数式、简洁的方式来执行集合操作,使代码更易读并且可以并行处理数据。