You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java8如何用flatMap将Map<String,List<String>>转为Map<String,Integer>

问题解答

常规实现方式(更简洁高效)

其实不用flatMap就能轻松搞定,而且这是最直接的方案:

Map<String, List<String>> originalMap = new HashMap<>();
// 先填充好原始数据

Map<String, Integer> resultMap = originalMap.entrySet()
    .stream()
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        entry -> entry.getValue().size()
    ));

直接遍历原Map的每个键值对,把key保留,value换成对应List的元素个数就行,简单高效。

用flatMap的实现方式(可行但没必要)

如果硬要用上flatMap,也能实现,但属于绕远路的做法:

Map<String, Integer> resultWithFlatMap = originalMap.entrySet()
    .stream()
    // 把每个List里的元素都映射成对应的key,这样key会重复List.size()次
    .flatMap(entry -> entry.getValue().stream().map(item -> entry.getKey()))
    // 统计每个key的出现次数,得到Map<String, Long>
    .collect(Collectors.groupingBy(
        Function.identity(),
        Collectors.counting()
    ))
    // 把Long类型转成Integer,得到目标Map
    .entrySet()
    .stream()
    .collect(Collectors.toMap(
        Map.Entry::getKey,
        entry -> entry.getValue().intValue()
    ));

简单说,就是把每个List里的元素都替换成对应的key,然后统计每个key出现的次数——次数其实就是原List的元素个数。但这种方式多了拆分和统计的步骤,效率不如常规方案,完全没必要这么做。

内容的提问来源于stack exchange,提问作者stacktrace2234

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 12:30:42