Java如何统计List<Map>中同jobDescription的interviewType出现次数
实现方案
你当前代码的问题在于,Collections.frequency是统计单个Map的value集合中"L2"的出现次数,没有按jobDescription分组,也没有统计所有interviewType的出现次数,且定义的requiredMap内层value类型为String,无法存储数值类型的计数结果。
普通遍历实现(兼容全Java版本)
package com.test; import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; public class Sample { public static void main(String[] args) { List<Map<String, String>> listMap = new ArrayList<Map<String, String>>(); Map<String, String> map1 = new HashMap<String, String>(); map1.put("jobDescription", "Java Developer-SpringBoot"); map1.put("interviewType", "L2"); map1.put("hired", "yes"); listMap.add(map1); Map<String, String> map2 = new HashMap<String, String>(); map2.put("jobDescription", "Java Developer-SpringBoot"); map2.put("interviewType", "L2"); map2.put("hired", "yes"); listMap.add(map2); Map<String, String> map3 = new HashMap<String, String>(); map3.put("jobDescription", "Java Developer-SpringBoot"); map3.put("interviewType", "L1"); map3.put("hired", "no"); listMap.add(map3); // 修正返回结果结构:内层Map的value为Integer类型存储计数 Map<String, Map<String, Integer>> requiredMap = new HashMap<>(); for (Map<String, String> someMap : listMap) { String jobDesc = someMap.get("jobDescription"); String interviewType = someMap.get("interviewType"); // 外层Map不存在当前岗位则初始化内层统计Map if (!requiredMap.containsKey(jobDesc)) { requiredMap.put(jobDesc, new HashMap<>()); } Map<String, Integer> innerCountMap = requiredMap.get(jobDesc); // 更新对应面试类型的计数 Integer count = innerCountMap.get(interviewType); innerCountMap.put(interviewType, count == null ? 1 : count + 1); } // 打印验证结果 for (Map.Entry<String, Map<String, Integer>> entry : requiredMap.entrySet()) { System.out.println("岗位:" + entry.getKey()); for (Map.Entry<String, Integer> innerEntry : entry.getValue().entrySet()) { System.out.println(" 面试类型" + innerEntry.getKey() + "出现次数:" + innerEntry.getValue()); } } } }
Java 8+ 流式实现(更简洁)
如果你使用Java 8及以上版本,可以用Stream API简化代码:
package com.test; import java.util.ArrayList; import java.util.List; import java.util.Map; import java.util.stream.Collectors; public class Sample { public static void main(String[] args) { List<Map<String, String>> listMap = new ArrayList<>(); // listMap构造代码和上面一致,此处省略 Map<String, Map<String, Long>> requiredMap = listMap.stream() // 第一层分组:按岗位描述分组 .collect(Collectors.groupingBy( map -> map.get("jobDescription"), // 第二层分组:按面试类型分组,统计每组数量 Collectors.groupingBy( map -> map.get("interviewType"), Collectors.counting() ) )); // 打印验证逻辑和普通遍历版本一致 } }
输出结果
岗位:Java Developer-SpringBoot 面试类型L2出现次数:2 面试类型L1出现次数:1
内容的提问来源于stack exchange,提问作者Ashok.N
相关产品推荐
相关产品推荐

