在 Java 8 中,可以使用 Stream API 对集合对象进行去重操作。以下是一个例子,演示如何根据一个字段进行去重:

假设有一个 Person 类,包含 name 和 age 两个字段:

class Person {
   private String name;
   private int age;
   
   // 构造方法省略
   
   // getter 和 setter 省略
}

现在有一个 List 对象,我们要根据 name 字段进行去重。可以使用 Stream 的 distinct() 方法和 lambda 表达式来实现:

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 包。

Java 8 集合对象去重:根据字段进行去重

原文地址: https://www.cveoy.top/t/topic/qdYk 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录