获取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
相关产品推荐
相关产品推荐

