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

Java8集合对象根据某一个字段进行去重

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

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