实现对List里面的对象元素,以某个属性来分组

实现对List里面的对象元素,以某个属性来分组。

代码实现:

import com.alibaba.fastjson.JSON;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class ListGroupTest {

    static List<User> userList = new ArrayList<>();

    public static void main(String[] args) {

        /* 方式一:构建list,map,来实现对List,按某个元素分组 (当分组的元素存在为null时,可使用) */
        Map<Integer, List<User>> groupBy2 = new HashMap<>();
        List<User> tempList = null;
        for(User user : userList) {
            if(groupBy2.containsKey(user.getSex())) {
                tempList = groupBy2.get(user.getSex());
                tempList.add(user);
            } else {
                // 否则,第一次先构造一个list,在存入map
                tempList = new ArrayList<>();
                tempList.add(user);
                groupBy2.put(user.getSex(), tempList);
            }
        }
        System.out.println("groupBy2: " + JSON.toJSONString(groupBy2));

        /* 方式二:使用java8 来实现对List,按某个元素分组 (当分组的元素都不为null时,可使用,否则,会报空指针) */
        Map<Integer, List<User>> groupBy = userList.stream().collect(Collectors.groupingBy(User::getSex));
        System.out.println("groupBy: " + JSON.toJSONString(groupBy));
    }

    static {
        User user = new User();
        user.setId(1L);
        user.setName("张三");
        user.setSex(1);
        userList.add(user);

        user = new User();
        user.setId(2L);
        user.setName("李四");
        user.setSex(0);
        userList.add(user);

        user = new User();
        user.setId(3L);
        user.setName("王五");
        user.setSex(1);
        userList.add(user);

        user = new User();
        user.setId(4L);
        user.setName("赵六");
        user.setSex(0);
        userList.add(user);

        user = new User();
        user.setId(5L);
        user.setName("小七");
        user.setSex(0);
        userList.add(user);

        /* 将分组的字段 设置为null */
        user = new User();
        user.setId(6L);
        user.setName("大巴");
        user.setSex(null);
        userList.add(user);
    }


    static class User {

        private Long id;
        private String name;
        private Integer sex;
        private String remark;

        /* 省略 get set */
    }

}
posted @ 2020-03-31 18:01  小葱拌豆腐~  阅读(1369)  评论(0编辑  收藏  举报