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

如何使用Java merge方法向Map<Character,List<Integer>>的列表值追加元素

报错根因
  • 你调用Arrays.asList(t)生成的是定长列表,它是数组的轻量视图,不支持add()、remove()这类修改列表长度的操作,调用就会抛出UnsupportedOperationException
  • 重映射函数逻辑不符合merge的设计语义:merge传入的重映射函数两个入参分别是当前key对应的旧值、你传入的默认新值,不需要再手动从map中二次查询对应key的列表,在重映射函数内操作原map也可能引发未知异常。
基于merge的正确实现
Map<Character, List<Integer>> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
    int idx = i;
    map.merge(
        s.charAt(idx),
        // 初始值用可变ArrayList,避免定长列表问题
        new ArrayList<>(List.of(idx)),
        // 重映射逻辑:直接往已存在的旧列表添加当前索引,返回旧列表即可
        (oldList, newList) -> {
            oldList.add(idx);
            return oldList;
        }
    );
}

Java8兼容提示:如果使用Java8版本,将List.of(idx)替换为Arrays.asList(idx)即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 18:54:06