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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 03:57:03