Java实现员工按姓氏排序后输出指定格式表格的问题求解
代码修改点
- 修正
separationDate字段类型:原double类型存在精度风险,改为Integer类型,方便处理未离职员工的0值显示为空 - 调整字段格式化规则:统一每列占位宽度,保证表格对齐
- 新增表格表头、分隔线打印逻辑,符合标准表格输出要求
- 保留原按姓氏+名字排序的逻辑,仅调整输出格式
完整可运行代码
import java.util.Arrays; import java.util.Comparator; import java.util.List; import java.util.function.Function; public class EmployeeSort { public static void main(String[] args) { Employee[] employees = { new Employee("John","Johnson","Manager",20161231), new Employee("Tou","Xiong","Software Engineer",20161005), new Employee("Michaela", "Michaelson", "District Manager", 20151219), new Employee("Jake","Jacobson","Programmer",0), new Employee("Jackquelyn", "Jackson", "DBA",0), new Employee("Sally","Webber","Web Developer",20151218) }; List<Employee> list = Arrays.asList(employees); // 定义排序规则:先按姓氏,再按名字 Function<Employee, String> byFirstName = Employee::getFirstName; Function<Employee, String> byLastName = Employee::getLastName; Comparator<Employee> lastThenFirst = Comparator.comparing(byLastName).thenComparing(byFirstName); // 打印排序后的表格 System.out.println("按姓氏升序排序的员工列表:"); // 打印表头 System.out.printf("%-18s %-22s %s%n", "姓名", "职位", "离职日期"); // 打印分隔线 System.out.println("----------------------------------------------------"); // 排序后逐行打印 list.stream() .sorted(lastThenFirst) .forEach(System.out::println); } } class Employee { private String firstName; private String lastName; private String department; // 改为Integer类型处理空值 private Integer separationDate; public Employee(String firstName, String lastName, String department, Integer separationDate) { this.firstName = firstName; this.lastName = lastName; this.department = department; this.separationDate = separationDate; } public String getFirstName() { return firstName; } public void setFirstName(String firstName) { this.firstName = firstName; } public String getLastName() { return lastName; } public void setLastName(String lastName) { this.lastName = lastName; } public String getDepartment() { return department; } public void setDepartment(String department) { this.department = department; } public Integer getSeparationDate() { return separationDate; } public void setSeparationDate(Integer separationDate) { this.separationDate = separationDate; } public String getName() { return String.format("%s %s", getFirstName(), getLastName()); } @Override public String toString() { // 处理离职日期为0的情况显示为空 String dateStr = separationDate == 0 ? "" : String.valueOf(separationDate); return String.format("%-18s %-22s %s", getName(), getDepartment(), dateStr); } }
输出示例
按姓氏升序排序的员工列表: 姓名 职位 离职日期 ---------------------------------------------------- Jackquelyn Jackson DBA Jake Jacobson Programmer John Johnson Manager 20161231 Michaela Michaelson District Manager 20151219 Sally Webber Web Developer 20151218 Tou Xiong Software Engineer 20161005
内容的提问来源于stack exchange,提问作者Daniel.grafton
相关产品推荐
相关产品推荐

