JAVA 自定义对象集合 List<T> 根据自定义字段去重

1、拥有自定义对象 MyUser

1    @Data
2    public class MyUser {
3         private String userName;
4         private String passWord;
5     }

2、编写自定义去重方法实现

/**
     * 根据list中对象某些字段去重
     * @param list 需要去重的list
     * @return 返回去重后的list
     */
    private static List<MyUser> removeDuplicateOutputField(List<MyUser> list) {
        Set<MyUser> set = new TreeSet<>(new Comparator<MyUser>() {
            @Override
            public int compare(MyUser myUser, MyUser myUserNew) {
                int compareToResult = 1;//==0表示重复
                if(StringUtils.equals(myUser.getUserName(), myUserNew.getUserName()) &&
                        StringUtils.equals(myUser.getPassWord(), myUserNew.getPassWord())) {
                    compareToResult = 0;
                }
                return compareToResult;
            }
        });
        set.addAll(list);
        return new ArrayList<>(set);
    }

注意:其中StringUtils.equals()   传入两个比较对象对应的字段,

比如想要加入userName 字段去重  就要加入  如下条件即可,  想要添加几个字段自行添加即可

StringUtils.equals(myUser.getUserName(), myUserNew.getUserName())  也可以  使用
myUser.getAge().equals(myUserNew.getAge())  自行测试决定

3、测试结果

    @Test
    public void distinctMyUser(){
        List<MyUser> list1 = new ArrayList<>();
        MyUser user1 = new MyUser();
        user1.setUserName("zhangsan");
        user1.setPassWord("1234567");
        list1.add(user1);

        MyUser user2 = new MyUser();
        user2.setUserName("zhangsan");
        user2.setPassWord("123456");
        list1.add(user2);

        MyUser user3 = new MyUser();
        user3.setUserName("lisi");
        user3.setPassWord("123456");
        list1.add(user3);

        MyUser user4 = new MyUser();
        user4.setUserName("lisi");
        user4.setPassWord("123456");
        list1.add(user4);

        for (MyUser b: list1) {
            System.out.println("去重前:"+b.toString());
        }

        //去重
        list1 = removeDuplicateOutputField(list1);

        for (MyUser b: list1) {
            System.out.println("去重后:"+b.toString());
        }
    }

运行结果如下,达到预期,根据自己想要的字段进行list集合去重操作。

猜你喜欢

转载自www.cnblogs.com/yinfengjiujian/p/11738641.html