已知数据都存在WargameConfig.HallMap里。
一、Map<String, Integer>
需求:按照scenarioName进行分类,统计每种scenarioName下的Room对象有多少;
思路:统计一个名为WargameConfig.HallMap的集合中,每个不同场景名称(scenarioName)出现的次数。返回一个键值对映射(Map<String, Integer>),其中键是场景名称,值是该名称出现的次数。
@Overridepublic Map<String, Integer> getScenarioNameCounts() {// 1. 创建一个空的HashMap,用于存储场景名称及其出现次数Map<String, Integer> scenarioNameCounts = new HashMap<>();// 2. 遍历WargameConfig.HallMap中的每一个键值对(房间ID与Room对象)for (Map.Entry<String, Room> entry : WargameConfig.HallMap.entrySet()) {// 3. 处理每个 entry,获取当前遍历到的Room对象Room room = entry.getValue();// 4. 从Room对象中提取场景名称(scenarioName)String scenarioName = room.getScenarioName();// 5. 更新统计:将当前场景名称的计数加1scenarioNameCounts.put(scenarioName, scenarioNameCounts.getOrDefault(scenarioName, 0) + 1);}return scenarioNameCounts;}
关键:
(1)entrySet(
):返回 Map 中所有键值对的集合,将 HallMap 转换为 Set<Map.Entry<String, Room>> 集合,每个元素是 Map.Entry<String, Room> 类型。
(2)Map.Entry
:表示键值对:Map.Entry 是 Map 接口的静态内部接口,用于封装单个键值对实体。Map.Entry<String, Room>:表示一个键值对实体,包含 getKey() 和 getValue()和setValue() 方法。
使用 entrySet 遍历,直接通过 Map.Entry 获取键和值
// 方式1:entrySet()(推荐)
for (Map.Entry<String, Room> entry : map.entrySet()) {String key = entry.getKey();Room value = entry.getValue()</