list根据对象的属性值去掉重复元素

时间:2025-02-13 08:58:31

1.对于list<User> 类型的去重。

1. 正序删除,取对象的属性中第一个重复的 对象组成list, 删除后续list中与第一个对象的id相等的元素, 

    public void removeDuplicate(List<PersonVo> personVoList) {
        if((personVoList)){
            return ;
        }
        
        for (int i = 0; i < (); i++) {
            PersonVo personVo = (i);
            String a00 = personVo.getA00();
            for (int j = i+1; j < (); j++) {
                PersonVo vo = (j);
                if((a00, vo.getA00())){
                    (j);
                    j--;
                }
            }
        }
    }

输出结果:

正序删除后:

去重前:[PersonVo(a00=111, name=aaa, charge=0), PersonVo(a00=222, name=bbb, charge=0), PersonVo(a00=333, name=ccc, charge=0), PersonVo(a00=111, name=ddd, charge=0), PersonVo(a00=111, name=eee, charge=1), PersonVo(a00=444, name=fff, charge=0)]
去重后:[PersonVo(a00=111, name=aaa, charge=0), PersonVo(a00=222, name=bbb, charge=0), PersonVo(a00=333, name=ccc, charge=0), PersonVo(a00=444, name=fff, charge=0)]
排序后aaa,bbb,ccc,fff

测试数据:

 public static void main(String[] args) {
        List<PersonVo> list = new ArrayList<>();
        PersonVo user = new PersonVo();
        user.setA00("111");
        ("aaa");
        ("0");

        PersonVo user1 = new PersonVo();
        user1.setA00("222");
        ("bbb");
        ("0");

        PersonVo user2 = new PersonVo();
        user2.setA00("333");
        ("ccc");
        ("0");

        PersonVo user3 = new PersonVo();
        user3.setA00("111");
        ("ddd");
        ("0");

        PersonVo user4 = new PersonVo();
        user4.setA00("111");
        ("eee");
        ("1");
        PersonVo user5 = new PersonVo();
        user5.setA00("444");
        ("fff");
        ("0");

        (user);
        (user1);
        (user2);
        (user3);
        (user4);
        (user5);
        DeptBaseInfService ll = new DeptBaseInfService();
        ("去重前:"+list);
        //倒序删除 时使用,(list);
        (list);
        ("去重后:"+list);

    }

2.逆序删除,保留重复id的最后一个元素。

a. 使用双重for循环删除,可以先倒序list. 再执行

removeDuplicate 方法。 
(personVoList);

        for (int i = 0; i < (); i++) {
            PersonVo personVo = (i);
            String a00 = personVo.getA00();
            for (int j = i+1; j < (); j++) {
                PersonVo vo = (j);
                if((a00, vo.getA00())){
                    (j);
                    j--;
                }
            }
        }

b. 使用stream流快捷删除(推荐使用)

(personVoList);

ArrayList<PersonVo> collect = ().collect(((() -> new TreeSet<>(
                    (PersonVo::getA00)
            )), ArrayList::new));
// 生成了一个新的list

逆序删除后,测试结果:

去重前:[PersonVo(a00=111, name=aaa, charge=0), PersonVo(a00=222, name=bbb, charge=0), PersonVo(a00=333, name=ccc, charge=0), PersonVo(a00=111, name=ddd, charge=0), PersonVo(a00=111, name=eee, charge=1), PersonVo(a00=444, name=fff, charge=0)]
去重后:[PersonVo(a00=444, name=fff, charge=0), PersonVo(a00=111, name=eee, charge=1), PersonVo(a00=333, name=ccc, charge=0), PersonVo(a00=222, name=bbb, charge=0)]
排序后eee,fff,ccc,bbb

 2. list的简单删除,初级业务使用List<String> 类型

     1. for循环删除

public static List removeDuplicate1(List list) {
    for (int i = 0; i < () - 1; i++) {
        for (int j = () - 1; j > i; j--) {
            if ((j).equals((i))) {
                (j);
            }
        }
    }
    return list;
}

     2. 使用迭代器删除

public static void removeDuplicateWithOrder3(List list) {
    Set set = new HashSet();
    List newList = new ArrayList();
    for (Iterator iter = (); (); ) {
        Object element = ();
        if ((element))
            (element);
    }
    ();
    (newList);
    (" remove duplicate " + list);
}

3. 使用hashset 删除,再将hashset 转化为list

ArrayList<Integer> numbersList = new ArrayList<>((1, 1, 2, 3, 3, 3, 4, 5, 6, 6, 6, 7, 8)); 
        (numbersList);
        LinkedHashSet<Integer> hashSet = new LinkedHashSet<>(numbersList);

 List<String> list = new ArrayList<String>(hashSet);

    4. stream流删 除

 ().distinct().collect(());

 3. stream流多个条件去重(待测试

多个字段或者多个条件去重

ArrayList<PatentDto> collect1 = ().collect((
                (() -> new TreeSet<>(
                        (p->() + ";" + ()))), ArrayList::new)

相关文章