Java 8 集合对象去重:根据字段进行去重
在 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/qdYk 著作权归作者所有。请勿转载和采集!