我有一个集合ArrayList<User>,里面装有三个user对象,user对象里有三个属性,id name和date其中user.getName里面有重复的值,比如list第一个下标的setName("a"),第三个下标的setName("a")也是a如果发现name值相同,那么再把name值相同的两个对象里的data属性取出来做比较,获取date值大的那条记录(那个user对象),data小的那个则不要了。请问代码如何实现呀?谢谢~ List<User> list = new ArrayList<User>();
User bo1 = new User();
bo1.setUserId("1");
bo1.setName("a");
bo1.setDate(Date.valueOf("2012-05-11 11:37:26"));

Userbo2 = new User();
bo2.setUserId("2");
bo2.setName("b");
bo2.setDate(Date.valueOf("2012-05-11 11:37:26"));

Userbo3 = new User();
bo3.setUserId("3");
bo3.setName("a");
bo3.setDate(Date.valueOf("2012-05-11 11:37:27"));

解决方案 »

  1.   

    数据量如果多的话,直接用List来做可能效率较低,建议借助HashMap<String, User>来作为过渡的处理。伪代码类似:
    HashMap<String, User> map = new HashMap<String, User>();
    for (int i=0;i<list.size();i++) {
      User vo = list.get(i);
      if (map.get(vo.getName() == null) {
        map.put(vo.getName(), vo);
      } else {
        User old = map.get(vo.getName());
        略:比较old和vo谁的date大,然后写入map中。
      }
    }最后map中剩下的元素就是你要的结果,需要的话就把它重组为List了。
      

  2.   

    既然是已经保存在list里的数据,可以先排序,然后再遍历删除
    Collections.sort(list, new Comparator<User>() { //排序
        public int compare(User u1, User u2) {
            if (u1 == null) {
                return (u2==null ? 0 : 1);
            } else if (u2 == null) {
                return -1;
            }        if (u1.getName().equals(u2.getName())) { //按姓名排
                return (int)(u2.getDate().getTime() - u1.getDate().getTime()); 
            } else if (u2.getDate().getTime() - u1.getDate().getTime()) {
                return u1.getUserId().compareTo(u2.getUserId());
            }        return u1.getName().compareTo(u2.getName());
        }
    });
    //删除
    User last = null;
    for (int i=list.size()-1; i>=0; i--) {
        if (last != null) {
           if (last.getName().equals(list.get(i).getName())) {
                list.remove(i+1);
            }
            last = list.get(i);
        }    
    }
      

  3.   

    同建议用hashMap来实现,同时在2楼中,相同对象删除时,两个对象都应该删除。这样list.size会又少一个