如何优化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
相关产品推荐
相关产品推荐

