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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 00:36:05