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)