list根据某个字段去重

时间:2021-12-05 14:59:45

 

方法一:使用Set

List<User> newList = new ArrayList<User>();
Set<String> set = new HashSet<String>();
for (User user : list) {
    String userName = user.getName();
    if (!set.contains(userName)) { //set中不包含重复的
        set.add(userName);
        newList.add(user);
    }
}

System.out.println("Set去重后的集合: " + newList);

 

方法二:使用Map

List<User> newList = new ArrayList<User>();

HashMap<String, String> map = new HashMap<String, String>();
for (User user : list) {
    String userName = user.getName();
    String value = map.get(userName);
    if (StringUtils.isBlank(value)) { //如果value是空的  说明取到的这个name是第一次取到
        map.put(userName, userName);
        newList.add(user); //newList就是我们想要的去重之后的结果
    }
}

System.out.println("Map去重后的集合: " + newList);

 

方法三:使用List(可以根据多个字段)

List<String> newList = new ArrayList<String>();
List<User> userList = new ArrayList<User>();
for (User cd : list) {
    if (!newList.contains("" + cd.getAge())) { // 多个字段的话"" + cd.getAge() + cd.getSex()
        newList.add("" + cd.getAge()); // 多个字段的话"" + cd.getAge() + cd.getSex()
        userList.add(cd);
    }
}

System.out.println("List去重后的集合: " + userList);

 

 

 

 

附:测试User类

/**
 * list根据某个字段去重
 *
 * @author xc
 * @version V1.0 2017年9月30日
 */
public class list根据某个字段去重 {

    private static List<User> list;

    static {
        User user1 = new User("zhangsan1", 20, true);
        User user2 = new User("zhangsan2", 20, true);
        User user3 = new User("zhangsan1", 30, true);
        list = new ArrayList<User>();
        list.add(user1);
        list.add(user2);
        list.add(user3);
    }

    public static void main(String[] args) {
        duplicateMap();
        duplicateSet();
        duplicateList();
    }

    /**
     * 使用List
     */
    private static void duplicateList() {
        List<String> newList = new ArrayList<String>();
        List<User> userList = new ArrayList<User>();
        for (User cd : list) {
            if (!newList.contains("" + cd.getAge() + cd.getSex())) {
                newList.add("" + cd.getAge() + cd.getSex());
                userList.add(cd);
            }
        }

        System.out.println("List去重后的集合: " + userList);
    }

    /**
     * 使用set
     */
    private static void duplicateSet() {
        List<User> newList = new ArrayList<User>();
        Set<String> set = new HashSet<String>();
        for (User user : list) {
            if (user == null) {
                continue;
            }
            String userName = user.getName();
            if (userName != null) {
                if (!set.contains(userName)) { //set中不包含重复的
                    set.add(userName);
                    newList.add(user);
                } else {
                    continue;
                }
            }
        }

        System.out.println("Set去重后的集合: " + newList);

    }

    /**
     * 使用map
     */
    private static void duplicateMap() {
        List<User> newList = new ArrayList<User>();

        HashMap<String, String> map = new HashMap<String, String>();
        for (User user : list) {
            if (user == null) {
                continue;
            }
            String name = user.getName();
            if (name != null) {
                String value = map.get(name);
                if (StringUtils.isBlank(value)) { //如果value是空的  说明取到的这个name是第一次取到
                    map.put(name, name);
                    newList.add(user); //newList就是我们想要的去重之后的结果
                } else {
                    continue;
                }
            }
        }

        System.out.println("Map去重后的集合: " + newList);

    }

}