list集合删除某个元素值相同的对象

实体类User 有三个属性:id name age

public class User {
    private Integer id;
    private String name;
    private Integer age;
}

比如说下方数据,我要去除list中user对象id为i的数据,只留下一个。

	 public static void main(String[] args) {
		User user = new User();
        user.setId(1);
        user.setName("小四");
        user.setAge(24);
        User user1 = new User();
        user1.setId(2);
        user1.setName("小五");
        user1.setAge(25);
        User user2 = new User();
        user2.setId(1);
        user2.setName("小六");
        user2.setAge(26);
        List users = new ArrayList<>();
        users.add(user);
        users.add(user1);
        users.add(user2);
        
		HashMap tempMap = new HashMap<>();
        // 去掉重复的key
        for (User userInfo : users) {
            Integer id = userInfo.getId();
            // containsValue(Object value)该方法判断Map集合中是否包含指定的键值,如果包含返回true,不包含返回false
            if (tempMap.containsKey(id)) {
                User newUser = new User();
                newUser.setId(id);
                // 合并相同key的value
                newUser.setName(tempMap.get(id).getName());
                newUser.setAge(tempMap.get(id).getAge());
                // HashMap不允许key重复,当有key重复时,前面key对应的value值会被覆盖
                tempMap.put(id, newUser);
            } else {
                tempMap.put(id, userInfo);
            }
        }
        List newList = new ArrayList<>();
        Iterator iter = tempMap.entrySet().iterator();
        while (iter.hasNext()) {
            Map.Entry entry = (Map.Entry) iter.next();
            User newUser = (User) entry.getValue();
            newList.add(newUser);
        }

        System.out.println("newList====" + newList);
    }

运行main方法结果是:
list集合删除某个元素值相同的对象_第1张图片
可以看到小六的数据没有了,因为它和小四的id一样,同为1,所以被去除了。

那么下面问题来了,我想要小六的数据咋办,很简单,只需要在这个位置就能对重复值的数据进行处理,如果我把小四、小六数据结果相加:

list集合删除某个元素值相同的对象_第2张图片
这样子输出结果就是这样的:
list集合删除某个元素值相同的对象_第3张图片
在实际开发过程中可以根据实际情况进行数据的处理。

你可能感兴趣的:(java,list集合删除元素值相同对象)