Java 列表获取最后一个重复的对象

Java List get last duplicate Object

我有一个动态填充的对象列表,我只想保留最后一个复制的对象。我试过 HashSet 来删除重复项,但它在我的 case.Can 中没有做大事 有人帮助吗? 我的用户对象如下所示:

 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 找到重复的对象,并只获取列表中重复对象的最后一个对象,所以如果我打印我想要的最终列表内容拥有这样的东西:

Name: Mike Jordon, Score: 3, Id: 1
Name: kaos family, Score: 2, Id: 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 应该会得到预期的结果。