当前位置: 移动技术网 > IT编程>开发语言>Java > 根据list中对象的属性去重和排序小结(必看篇)

根据list中对象的属性去重和排序小结(必看篇)

2019年07月22日  | 移动技术网IT编程  | 我要评论

如下所示:

//去重
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中对象的属性去重和排序小结(必看篇)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持移动技术网。

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网