Java8集合对象根据某一个字段进行去重
在Java 8中,可以使用Stream API对集合对象进行去重操作。以下是一个例子,演示如何根据一个字段进行去重:
假设有一个Person类,包含name和age两个字段:
class Person {
private String name;
private int age;
// 构造方法省略
// getter和setter省略
}
现在有一个List
List<Person> personList = new ArrayList<>();
// 假设这里添加了一些Person对象到personList
List<Person> distinctList = personList.stream()
.filter(distinctByKey(Person::getName))
.collect(Collectors.toList());
在上面的例子中,我们定义了一个名为distinctByKey的静态方法,用于创建一个Predicate对象,用于根据指定的字段进行去重:
public static <T> Predicate<T> distinctByKey(Function<? super T, Object> keyExtractor) {
Map<Object, Boolean> seen = new ConcurrentHashMap<>();
return t -> seen.putIfAbsent(keyExtractor.apply(t), Boolean.TRUE) == null;
}
该方法使用了ConcurrentHashMap来保存已经出现过的字段值,如果字段值已经存在于Map中,则过滤掉该对象。
最后,我们使用collect()方法将过滤后的结果收集到一个新的List中。
注意:在使用Stream API对集合进行操作时,需要导入java.util.stream和java.util.function包
原文地址: https://www.cveoy.top/t/topic/iwvR 著作权归作者所有。请勿转载和采集!