怎么将一个list集合里的n多个对象数据根据对象数据的某个字段名的值相同归为一个新的对象?

比如:返回的数据格式是[{"id":"1", "name":"lisi","age":18,......},{"id":"2", "name":"wanger","age":18,......},{"id":"3", "name":"zhangsan","age":23,......},{"id":"1", "name":"liuqie","age":12,......},{"id":"2", "name":"ningba","age":19,......}]就是将id一样的放在一起,返回的格式是[{{"id":"1", "name":"lisi","age":18,......},{"id":"1", "name":"liuqie","age":12,......}},{{"id":"2", "name":"wanger","age":18,......},{"id":"2", "name":"ningba","age":19,......}},{"id":"3", "name":"zhangsan","age":23,......}]我试过用stream流写过,他返回的map集合不行,不适合,他分组出来会带key以及将id一样的变成list集合格式,求大神指教

最后的格式是

[
    {
        "groupname": "值1",

        “time”:0.5,
        "item": [
            {"id": "1", "groupname": "值1", "value": "11"},
            { "id": "2", "groupname": "值1", "value": "22"}
        ]
    },
    {
        "groupname": "值2",

        "time":0.8,
        "item": [
            {"id": "3", "groupname": "值2", "value": "33"},
            { "id": "4", "groupname": "值2", "value": "44"}
        ]
    },
    {
        "groupname": "值3",

        "time":1.5,
        "item": [
            {"id": "5", "groupname": "值3", "value": "55"},
            { "id": "6", "groupname": "值3", "value": "66"}
        ]
    }
]

[{"name":"0name","id":"0"},{"name":"1name","id":"1"},{"name":"2name","id":"2"},{"name":"0namegg","id":"0"},{"name":"1namegg","id":"1"}]
[[{"name":"0name","id":"0"},{"name":"0namegg","id":"0"}],[{"name":"1name","id":"1"},{"name":"1namegg","id":"1"}],[{"name":"2name","id":"2"}]]

 

这样的格式吗?

你这种json格式不存在的

System.out.println(JSON.toJSON(list));
Map<String, List<User>> collect = list.stream().collect(Collectors.groupingBy(e -> e.getId()));

System.out.println(JSON.toJSON(collect.values()));

前端要的就是这个格式stream流写的这个返回Map我写过,不适用

[
    {
        "groupname": "值1",
        "item": [
            {"id": "1", "groupname": "值1", "value": "11"},
            { "id": "2", "groupname": "值1", "value": "22"}
        ]
    },
    {
        "groupname": "值2",
        "item": [
            {"id": "3", "groupname": "值2", "value": "33"},
            { "id": "4", "groupname": "值2", "value": "44"}
        ]
    },
    {
        "groupname": "值3",
        "item": [
            {"id": "5", "groupname": "值3", "value": "55"},
            { "id": "6", "groupname": "值3", "value": "66"}
        ]
    }
]

就是最后要这种

用 stream 的 groupBy

你之前题目给的json格式不对,现在这种格式用groupBy就可以了

 

 

Map<String, List<User>> cardRelationMap = userList.stream()
        .collect(Collectors.groupingBy(User::getGroupName));

然后把这个map 根据key 和value 转换成一个list对象

  public static void main(String[] args) {
        List<User> userList = new ArrayList<>();
        List<UserVo> voList = new ArrayList<>();
        userList.add(new User(1,"a"));
        userList.add(new User(2,"a"));
        userList.add(new User(3,"b"));
        Map<String, List<User>> map = userList.stream().collect(Collectors.groupingBy(User::getName));
        map.forEach((k,v)->voList.add(new UserVo(k,v)));
        System.out.println(JSON.toJSONString(voList));

    }

    @AllArgsConstructor
    @Data
    static class User{
        Integer id;
        String name;
    }

    @AllArgsConstructor
    @Data
    static class UserVo{
        String name;
        List<User> items;
    }

 

没问题啊,格式是正确的

 

直接给list.sort()排个序就完事了。