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

Java中将Map键转为小写时合并对应值集合的简便实现方法有哪些?

优化实现方案

方案1:用computeIfAbsent简化原有循环(Java 8+ 兼容,可读性最优)

借助Map内置的computeIfAbsent方法可以省去手动判断键是否存在的逻辑,代码大幅精简:

Map<String, Set<String>> result = new HashMap<>();
map.forEach((key, value) -> {
    String lowerKey = key.toLowerCase();
    Set<String> lowerValues = value.stream()
            .map(String::toLowerCase)
            .collect(Collectors.toSet());
    result.computeIfAbsent(lowerKey, k -> new HashSet<>())
            .addAll(lowerValues);
});

方案2:纯Stream流式实现

如果偏好函数式写法,可以直接用流收集器一步生成结果:

Java 9+版本(支持flatMapping收集器,代码更简洁)

Map<String, Set<String>> result = map.entrySet().stream()
        .collect(Collectors.groupingBy(
                entry -> entry.getKey().toLowerCase(),
                Collectors.flatMapping(
                        entry -> entry.getValue().stream().map(String::toLowerCase),
                        Collectors.toSet()
                )
        ));

Java 8兼容版本

用toMap的合并函数处理重复小写键的集合合并逻辑:

Map<String, Set<String>> result = map.entrySet().stream()
        .collect(Collectors.toMap(
                entry -> entry.getKey().toLowerCase(),
                entry -> entry.getValue().stream()
                        .map(String::toLowerCase)
                        .collect(Collectors.toSet()),
                (existSet, currSet) -> {
                    existSet.addAll(currSet);
                    return existSet;
                }
        ));

小提示:如果程序需要适配多语言环境,建议调用toLowerCase(Locale.ROOT)替代无参方法,避免部分语言环境下字符转换不符合预期的问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 04:27:03