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
应该会得到预期的结果。
我有一个动态填充的对象列表,我只想保留最后一个复制的对象。我试过 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
应该会得到预期的结果。