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

如何优化Java按月份列生日名单代码并显示无生日的月份

实现方案

核心思路

  • 预先定义月份名称映射表,用数组下标对应月份,消除冗余if分支
  • 先将所有员工按生日月份分组存储,再按1-12月的固定顺序遍历输出,确保空月份也能正常显示

实现代码

private Employee[] arr = new Employee[8];//Employee类
// 预定义完整月份名称,下标0对应1月,下标1对应2月,以此类推
private static final String[] MONTH_NAMES = {"January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"};

public String birthdays() throws ParseException{
    StringBuilder list = new StringBuilder();
    // 初始化12个月份对应的员工列表
    List<String>[] monthBirthList = new List[12];
    for (int i = 0; i < 12; i++) {
        monthBirthList[i] = new ArrayList<>();
    }

    // 遍历所有员工,按月份分组
    for (Employee employee : arr) {
        // 截取月份字符串转成数字,转成数组下标要减1
        int month = Integer.parseInt(employee.getDob().substring(3, 5)) - 1;
        monthBirthList[month].add(employee.getName() + " " + employee.getSurname());
    }

    // 按顺序输出12个月份的内容
    for (int i = 0; i < 12; i++) {
        list.append(MONTH_NAMES[i]).append(":\n");
        if (monthBirthList[i].isEmpty()) {
            list.append("//no birthday in ").append(MONTH_NAMES[i]).append("\n");
        } else {
            for (String name : monthBirthList[i]) {
                list.append(name).append("\n");
            }
        }
        // 月份之间加空行分隔,和示例格式一致
        list.append("\n");
    }

    // 如需直接打印输出可新增System.out.println(list)语句
    return list.toString().trim(); // trim去掉末尾多余空行
}

优化点说明

  • 消除了所有if分支判断,后续如果要调整月份名称只需要修改MONTH_NAMES数组即可,维护成本更低
  • 固定遍历12个月份输出,即使当月没有过生日的员工也会正常展示月份和空提示,完全符合要求的输出格式
  • 用StringBuilder替代字符串拼接,性能更高,避免大量字符串拼接产生的额外内存开销

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 18:09:03