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

Posted 听歌敲代码

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了实现对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 */
    }

}

以上是关于实现对List里面的对象元素,以某个属性来分组的主要内容,如果未能解决你的问题,请参考以下文章

list分组------根据某一个字段分组

精品list 元素 分组

如何对List集合中的对象进行按某个属性排序

Stream分组掌握这个你代码可以少些一半了

jdk1.8中list按对象的多个属性去重,按对象的某个属性分组

java List怎么分组去重