自定义predicate来对List进行去重


 

import java.util.ArrayList;
import java.util.List;
import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.function.Function;
import java.util.function.Predicate;
import lombok.Data;

/**
 * @author xfyou
 */
public class Test {

    public static void main(String[] args) {
        List<Person> personList = new ArrayList<>();
        Person p1 = new Person();
        p1.setName("Frank");
        personList.add(p1);

        Person p2 = new Person();
        p2.setName("Frank");
        personList.add(p2);

        Person p3 = new Person();
        p3.setName("Tom");
        personList.add(p3);

        personList.stream().filter(distinctByKey(Person::getName)).forEach(c -> System.out.println(c.getName()));
    }

    public static <T> Predicate<T> distinctByKey(Function<? super T, ?> keyExtractor) {
     // 这个局部变量必须定义,这个局部变量将会成为下面生成的局部匿名内部类的一个字段(field)
final Set<Object> seen = ConcurrentHashMap.newKeySet(); // 用 lambda 来代替匿名内部类 return t -> seen.add(keyExtractor.apply(t)); } @Data public static class Person { private String name; } }

 


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



猜您在找 Stream流:自定义的distinctByKey根据对象的属性进行去重 Spring Cloud Gateway 自定义断言(Predicate) List自定义排序 C# 自定义实体(类)List 复杂实体(类)List 的 Compare, 是否包含(Contains()),去重( Distinct()) List自定义对象的排序,根据对象的某一列进行排序 Spring-Cloud-Gateway Predicate谓词(断言)使用与自定义 通过自定义扩展方法DistinctBy实现去重 Java开发经验分享之如何给List集合进行排序。自定义排序的类,专门针对列表(List)中的日期数据进行排序;也可按指定属性进行。 如何对tableview进行自定义多选 List进行Distinct()去重
 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM