根据list中对象的属性去重和排序小结(必看篇)
如下所示:
//去重 publicclassUser{ privateintid; privateStringname; privateintage; publicUser(){} publicUser(intid,Stringname,intage){ super(); this.id=id; this.name=name; this.age=age; } publicintgetId(){ returnid; } publicvoidsetId(intid){ this.id=id; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } @Override publicStringtoString(){ return"User[id="+id+",name="+name+",age="+age+"]"; } } publicclassListTest{ /** *有一个Listlist放了五个对象:user1、user2、user3、user4、user5 User有三个属性Id、name、age 其中user2的记录大概是这样:“100”,"abc",20; user3的记录大概是这样:“100”,“def”,20; 请问怎么才能只保留user2和user3中的一个对象,并将其中的name合并到新对象中, 新对象如“100”,“abcdef”,20 这只是举个例子,实际中有可能user4和user5与此类似,如果有id相同的两个对象,则对其进行 合并,只保留一个对象,求一个通用的方法,能筛选出对象集合中某些相同ID的两个对象,将其合并 仍保留在原list中 *@paramargs */ //list有序可重复、set无序不可重复、mapkey不允许重复,key相同的后面的value会把前面的覆盖掉 //List存放的数据,默认是按照放入时的顺序存放的,比如依次放入A、B、C,则取得时候,则也是A、B、C的顺序 publicstaticvoidmain(String[]args){ List list=newArrayList<>(); list.add(newUser(1,"a",20)); list.add(newUser(1,"a",20)); list.add(newUser(2,"a",20)); list.add(newUser(3,"b",20)); list.add(newUser(1,"c",20)); list.add(newUser(4,"d",20)); list.add(newUser(2,"e",20)); list.add(newUser(1,"a",20)); /*for(Useruser:list){ System.out.println(user.toString()); } System.out.println();*/ list=mySort(list); for(Useruser:list){ System.out.println(user.toString()); } } publicstaticList mySort(List list){ HashMap tempMap=newHashMap<>(); for(Useruser:list){ intkey=user.getId(); //containsKey(Objectkey)该方法判断Map集合对象中是否包含指定的键名。如果Map集合中包含指定的键名,则返回true,否则返回false //containsValue(Objectvalue)value:要查询的Map集合的指定键值对象.如果Map集合中包含指定的键值,则返回true,否则返回false if(tempMap.containsKey(key)){ UsertempUser=newUser(key, tempMap.get(key).getName()+user.getName(), tempMap.get(key).getAge());//user.getAge(); //HashMap是不允许key重复的,所以如果有key重复的话,那么前面的value会被后面的value覆盖 tempMap.put(key,tempUser); }else{ tempMap.put(key,user); } } List tempList=newArrayList<>(); for(intkey:tempMap.keySet()){ tempList.add(tempMap.get(key)); } returntempList; } } //排序============================================= publicclassStudent{ privateintage; privateStringname; publicintgetAge(){ returnage; } publicvoidsetAge(intage){ this.age=age; } publicStringgetName(){ returnname; } publicvoidsetName(Stringname){ this.name=name; } @Override publicStringtoString(){ return"Student[age="+age+",name="+name+"]"; } } publicclassListSort{ publicstaticvoidmain(String[]args){ List list=newArrayList (); //创建3个学生对象,年龄分别是20、19、21,并将他们依次放入List中 Students1=newStudent(); s1.setAge(20); s1.setName("葛大"); Students2=newStudent(); s2.setAge(19); s2.setName("张杰"); Students3=newStudent(); s3.setAge(21); s3.setName("宝爷"); list.add(s1); list.add(s2); list.add(s3); System.out.println("排序前:"+list); Collections.sort(list,newComparator (){ /* *intcompare(Studento1,Studento2)返回一个基本类型的整型, *返回负数表示:o1小于o2, *返回0表示:o1和o2相等, *返回正数表示:o1大于o2。 */ publicintcompare(Studento1,Studento2){ //按照学生的年龄进行升序排列;<是降序 ///*if(o1.getAge()>o2.getAge()){ //return1; //} //if(o1.getAge()==o2.getAge()){ //return0; //} //return-1;*/ //returno1.getAge()-o2.getAge();//升序 //returno2.getAge()-o1.getAge();//降序 returno1.getName().compareTo(o2.getName());//按照姓名升序 //returno2.getName().compareTo(o1.getName());//按照姓名降序 } }); System.out.println("排序后:"+list); } }
以上这篇根据list中对象的属性去重和排序小结(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。