账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    【Java8求助】 一个有关List<Map>对象进行flatMap()方法而后分组的问题
    65
    0

    问题描述:有个List对象,如下:
    List<Map<String,Object>> query = new ArrayList<Map<String,Object>>
    Json视图下的例子数据为:
    [

    {
        "customer_attribute": "1",
        "customer_attribute_no": "0101019",
        "group_no": 1
    },
    {
        "customer_attribute": "2",
        "customer_attribute_no": "A001",
        "group_no": 1
    },
    {
        "customer_attribute": "3",
        "customer_attribute_no": "AA001",
        "group_no": 2
    }

    ]
    现在需求是将原List中数据构建成:
    [

    {
        "attributelist": [
            {
                "customer_attribute": "1",
                "customer_attribute_no": "0101019"
            },
            {
                "customer_attribute": "2",
                "customer_attribute_no": "A001"
            }
        ],
        "group_no": 1
    },
    {
        "attributelist": [
            {
                "customer_attribute": "3",
                "customer_attribute_no": "AA001"
            }
        ],
        "group_no": 2
    }

    ],
    我的想法是将原来的List中的多个Map先用stream中的flatMap()合成一个Map,让后对这个Map中以“group_no”为key进行分组,分组后将各自新Map中的“customer_attribute”构建新的key为“attributelist”的List,从而实现。但我太清楚具体该如何编写代码,有前辈可以指导写一下参考吗?万分感激!

    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    • IKeYistand 普通会员 1楼

      在Java 8中,我们可以使用flatMap()方法对List>对象进行分组。但是,我们需要特别注意的是,flatMap()方法是高阶函数,它返回一个新的Map对象,而不是原来的List>对象。

      假设我们有一个Map对象,它有一个名为"key"的键和一个名为"value"的值,我们可以使用以下代码来创建一个分组后的Map对象:

      java List<Map<String, Object>> groupedList = myList.stream() .collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.groupingBy(Map.Entry::getValue)));

      在这个例子中,我们首先使用stream()方法将List>对象转换为流。然后,我们使用collect()方法将流转换为一个Map对象。最后,我们使用collectors.groupingBy()方法对Map对象进行分组。

      然后,我们可以使用收集器的groupingBy()方法来获取每个分组的键和值。例如,以下代码将返回一个Map对象,其中键是"key",值是每个分组的值:

      java Map<String, List<Map<String, Object>>> groupedMap = groupedList.stream() .collect(Collectors.groupingBy(Map.Entry::getKey, Collectors.groupingBy(Map.Entry::getValue)));

      在这个Map对象中,每个键都是一个包含所有分组值的列表。

    更多回答
    扫一扫访问手机版
    • 回到顶部
    • 回到顶部