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

使用TreeMap收集城市与邮编列表报错UnsupportedOperationException

问题修复:城市对应邮编列表收集异常

错误原因

报错的java.lang.UnsupportedOperationException是因为你通过Arrays.asList(user.getPincode())创建的列表是固定大小的不可变列表,当执行list.add(user.getPincode())尝试添加新元素时,就会触发这个异常。Arrays.asList()返回的内部列表实现并没有重写add、remove等修改方法,调用这些方法会直接抛出不支持操作的异常。

修复方案

简洁版(推荐)

使用TreeMap的computeIfAbsent方法,自动处理城市是否存在的逻辑,同时创建可修改的ArrayList:

@Override
public TreeMap<String, List<String>> getCityWithPincode() {
    List<User> listOfUser = findAllUser();
    TreeMap<String, List<String>> tm = new TreeMap<>();

    for(User user : listOfUser) {
        // 若城市不存在则创建新的ArrayList,存在则直接获取列表,然后添加邮编
        tm.computeIfAbsent(user.getCity(), k -> new ArrayList<>())
          .add(user.getPincode());
    }

    return tm;
}

原逻辑修改版

如果你想保留原来的判断逻辑,只需把Arrays.asList替换为可修改的ArrayList:

@Override
public TreeMap<String, List<String>> getCityWithPincode() {
    List<User> listOfUser = findAllUser();
    TreeMap<String, List<String>> tm = new TreeMap<>();

    for(User user : listOfUser) {
        String city = user.getCity();
        String pincode = user.getPincode();
        
        if(tm.containsKey(city)) {
            tm.get(city).add(pincode);
        } else {
            List<String> pincodeList = new ArrayList<>();
            pincodeList.add(pincode);
            tm.put(city, pincodeList);
        }
    }

    return tm;
}

补充说明

原来代码里的if(tm.isEmpty())判断完全多余,因为tm.containsKey(user.getCity())在Map为空时自然会返回false,进入else分支创建新列表。

内容的提问来源于stack exchange,提问作者Subham Kr Gupta

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 00:05:26