根据list中对象的属性去重和排序小结(必看篇)
程序员文章站
2024-02-18 09:14:34
如下所示:
//去重
public class user {
private int id;
private string name;...
如下所示:
//去重 public class user { private int id; private string name; private int age; public user(){} public user(int id, string name, int age) { super(); this.id = id; this.name = name; this.age = age; } public int getid() { return id; } public void setid(int id) { this.id = id; } public string getname() { return name; } public void setname(string name) { this.name = name; } public int getage() { return age; } public void setage(int age) { this.age = age; } @override public string tostring() { return "user [id=" + id + ", name=" + name + ", age=" + age + "]"; } } public class listtest { /** * 有一个list<user> list 放了五个对象: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中 * @param args */ //list有序可重复、set无序不可重复、mapkey不允许重复,key相同的后面的value会把前面的覆盖掉 //list存放的数据,默认是按照放入时的顺序存放的,比如依次放入a、b、c,则取得时候,则也是a、b、c的顺序 public static void main(string[] args) { list<user> list = new arraylist<>(); list.add(new user(1,"a",20)); list.add(new user(1,"a",20)); list.add(new user(2,"a",20)); list.add(new user(3,"b",20)); list.add(new user(1,"c",20)); list.add(new user(4,"d",20)); list.add(new user(2,"e",20)); list.add(new user(1,"a",20)); /* for (user user : list) { system.out.println(user.tostring()); } system.out.println();*/ list = mysort(list); for (user user : list) { system.out.println(user.tostring()); } } public static list<user> mysort(list<user> list){ hashmap<integer,user> tempmap = new hashmap<>(); for (user user : list) { int key = user.getid(); // containskey(object key) 该方法判断map集合对象中是否包含指定的键名。如果map集合中包含指定的键名,则返回true,否则返回false // containsvalue(object value) value:要查询的map集合的指定键值对象.如果map集合中包含指定的键值,则返回true,否则返回false if(tempmap.containskey(key)){ user tempuser = new user(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<user> templist = new arraylist<>(); for(int key : tempmap.keyset()){ templist.add(tempmap.get(key)); } return templist; } } //排序============================================= public class student { private int age; private string name; public int getage() { return age; } public void setage(int age) { this.age = age; } public string getname() { return name; } public void setname(string name) { this.name = name; } @override public string tostring() { return "student [age=" + age + ", name=" + name + "]"; } } public class listsort { public static void main(string[] args) { list<student> list = new arraylist<student>(); //创建3个学生对象,年龄分别是20、19、21,并将他们依次放入list中 student s1 = new student(); s1.setage(20); s1.setname("葛大"); student s2 = new student(); s2.setage(19); s2.setname("张杰"); student s3 = new student(); s3.setage(21); s3.setname("宝爷"); list.add(s1); list.add(s2); list.add(s3); system.out.println("排序前:"+list); collections.sort(list, new comparator<student>(){ /* * int compare(student o1, student o2) 返回一个基本类型的整型, * 返回负数表示:o1 小于o2, * 返回0 表示:o1和o2相等, * 返回正数表示:o1大于o2。 */ public int compare(student o1, student o2) { //按照学生的年龄进行升序排列 ;<是降序 // /*if(o1.getage() > o2.getage()){ // return 1; // } // if(o1.getage() == o2.getage()){ // return 0; // } // return -1; */ // return o1.getage()-o2.getage();//升序 // return o2.getage()-o1.getage();//降序 return o1.getname().compareto(o2.getname()) ;// 按照姓名升序 // return o2.getname().compareto(o1.getname()) ;// 按照姓名降序 } }); system.out.println("排序后:"+list); } }
以上这篇根据list中对象的属性去重和排序小结(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持。