Java中List集合对象去重及按属性去重的8种方法
在Java中,List集合去重可以通过多种方式实现,以下是8种常见的去重方法:
- 使用Java 8 Stream API的
distinct()
方法。 - 利用HashSet不包含重复元素的特性。
- 使用
contains()
方法遍历比对。 - 使用
removeIf()
方法移除重复元素。 - 使用
LinkedHashSet
保持元素插入顺序。 - 使用
List.set()
方法替换重复元素。 - 使用
Iterator
遍历移除重复元素。 - 对象列表按属性去重,可以通过Stream API结合
Collectors.toMap()
实现。
以下是每种方法的示例代码:
// 示例1:Stream API的distinct()方法
List<Integer> listWithDuplicates = Arrays.asList(1, 2, 3, 2, 1);
List<Integer> distinctList = listWithDuplicates.stream().distinct().collect(Collectors.toList());
// 示例2:HashSet去重
Set<Integer> hashSet = new HashSet<>(listWithDuplicates);
List<Integer> hashSetList = new ArrayList<>(hashSet);
// 示例3:contains()方法去重
List<Integer> containsList = new ArrayList<>();
for (Integer number : listWithDuplicates) {
if (!containsList.contains(number)) {
containsList.add(number);
}
}
// 示例4:removeIf()方法去重
listWithDuplicates.removeIf(listWithDuplicates.subList(1, listWithDuplicates.size()).contains(a)::equals);
// 示例5:LinkedHashSet去重并保持顺序
Set<Integer> linkedHashSet = new LinkedHashSet<>(listWithDuplicates);
List<Integer> linkedHashSetList = new ArrayList<>(linkedHashSet);
// 示例6:set()方法去重
List<Integer> setList = new ArrayList<>(listWithDuplicates);
for (int i = 0; i < setList.size(); i++) {
setList.set(i, setList.get(i));
}
// 示例7:Iterator去重
Iterator<Integer> iterator = listWithDuplicates.iterator();
while (iterator.hasNext()) {
Integer number = iterator.next();
if (listWithDuplicates.indexOf(number) < listWithDuplicates.lastIndexOf(number)) {
iterator.remove();
}
}
// 示例8:按属性去重
List<Person> people = Arrays.asList(new Person("Alice", 30), new Person("Bob", 25), new Person("Alice", 30));
Map<String, Person> uniqueByName = people.stream()
.collect(Collectors.toMap(Person::getName, Function.identity(), (existing, replacement) -> existing));
List<Person> uniquePeople = new ArrayList<>(uniqueByName.values());
在示例8中,Person
类需要有getName()
和equals()
方法实现,以便正确比较对象的相等性。
注意:示例代码可能需要根据实际情况进行调整,以适应特定的数据类型和需求。
评论已关闭