我有一个动态填充的对象列表,我想只保留最后一个重复的对象。我尝试使用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
答案 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
应该会给你预期的结果。