根据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){
Listlist=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());
}
}
publicstaticListmySort(Listlist){
HashMaptempMap=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);
}
}
ListtempList=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){
Listlist=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中对象的属性去重和排序小结(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。