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

获取HashMap<String,List<String>>各键对应值大小的异常问题排查

问题分析与解决方案

你之所以只能拿到第一个键值对的大小,核心问题出在第二个循环的写法上:每次调用moduleNamesWithAllParameters.entrySet().iterator().next()都会重新获取Map的迭代器,并且只取第一个键值对,所以循环多少次都只会输出第一个建筑的设备数量。

修正后的代码(两种推荐方式)

方式1:遍历EntrySet(最直接高效)

直接遍历Map的Entry集合,每个Entry包含对应的键和值,能直接获取每个建筑的设备数量:

// 正确遍历所有键值对,输出每个建筑的设备数量
for (Map.Entry<String, List<String>> entry : moduleNamesWithAllParameters.entrySet()) {
    int deviceCount = entry.getValue().size();
    System.out.println(entry.getKey() + " 的设备数量:" + deviceCount);
}

方式2:遍历KeySet

如果习惯通过键来获取值,也可以遍历键集合后再获取对应的值:

// 通过键集合遍历
for (String buildingName : moduleNamesWithAllParameters.keySet()) {
    int deviceCount = moduleNamesWithAllParameters.get(buildingName).size();
    System.out.println(buildingName + " 的设备数量:" + deviceCount);
}

额外优化提示(可选)

你原来的代码中,使用parameters.subList(start, end - 1)存入Map的是原列表的视图,如果后续修改parameters列表,Map中的子列表也会跟着变化。如果需要独立的列表,可以改成:

moduleNamesWithAllParameters.put(moduleNames.get(i), new ArrayList<>(parameters.subList(start, end - 1)));

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 06:55:08