Java List获取最后一个重复的Object

时间:2015-05-20 20:21:34

标签: java list set hashset

我有一个动态填充的对象列表,我想只保留最后一个重复的对象。我尝试使用HashSet来删除重复项,但在我的情况下它没有做大事。任何人都可以帮忙解决这个问题吗? 我的用户对象如下所示:

 public class User {
    public int id,score
    public String firstName, lastName;

     Getters and Setters ...

    }


class getLasDuplicate {
    public static void main(String[] args) {
        List<User> a = new ArrayList<User>();

        User u = new User();
        u.setId(1);
        u.setScore(2);
        u.setFirstName("Mike"); 
        u.setLastName("Jordon");  
        a.add(u);

        User u = new User();
        u.setId(1);
        u.setScore(3);
        u.setFirstName("Mike"); 
        u.setLastName("Jordon");  
        a.add(u);

        User u = new User();
        u.setId(1);
        u.setScore(4);
        u.setFirstName("Mike"); 
        u.setLastName("Jordon");  
        a.add(u);

        User u = new User();
        u.setId(2);
        u.setScore(3);
        u.setFirstName("kaos"); 
        u.setLastName("family");  
        a.add(u);

        User u = new User();
        u.setId(1);
        u.setScore(3);
        u.setFirstName("Mike"); 
        u.setLastName("Jordon");  
        a.add(u);

        User u = new User();
        u.setId(2);
        u.setScore(2);
        u.setFirstName("kaos"); 
        u.setLastName("family");  
        a.add(u);
      for(User us: a){
     System.out.println( "Name:"+us.getFirstName +" "+us.getLastName+", Score:"+us.getScore()+", Id:"+us.getId());
     }
}

在这种情况下,我想通过Id 查找重复的对象,并且只获取列表中重复的对象的最后一个对象,所以如果我打印最终的List内容,我想要这样的东西:

Name: Mike Jordon, Score: 3, Id: 1
Name: kaos family, Score: 2, Id: 2

1 个答案:

答案 0 :(得分:2)

如果List是您的输入,并且您希望获得最后一次重复,则可以尝试将其转换为Map并再次将其更改回List,如下所示:

Map<Integer, User> amap = new HashMap<Integer, User>(); 
for(User i: a){
    amap.put(i.getId(), i);  //when duplicate User with same Id is added, new User value will replace old one. 
                             //So Id will always be mapped to last User with that Id
}

List<User> newA = new ArrayList(amap.values());

然后打印newA应该会给你预期的结果。