首页 > 解决方案 > 要映射的 Java 8 组列表

问题描述

我有一个具有以下签名的 Employee 和 EmployeeJob 类:

public class Employee {

    public Integer employeeId;

    public Integer getEmployeeId() {
        return employeeId;
    }

    public void setEmployeeId(Integer employeeId) {
        this.employeeId = employeeId;
    }
}

public class EmployeeJob {

    private Integer employeeJobId;
    private Employee employee;
    private String jobName;
    public Integer getEmployeeJobId() {
        return employeeJobId;
    }
    public void setEmployeeJobId(Integer employeeJobId) {
        this.employeeJobId = employeeJobId;
    }
    public Employee getEmployee() {
        return employee;
    }
    public void setEmployee(Employee employee) {
        this.employee = employee;
    }
    public String getJobName() {
        return jobName;
    }
    public void setJobName(String jobName) {
        this.jobName = jobName;
    }
}

我想要一个Map<Integer, List<EmployeeJob>>List<EmployeeJob>其中键是Employee中的employeeId 。如何使用 java 8 流按其employee->employeeId对该列表进行分组?

可以在单个流中解决,还是应该以某种方式拆分它还是采用经典解决方案?

标签: javajava-8java-stream

解决方案


使用Collectors.groupingBy

Map<Integer, List<EmployeeJob>> map =
    list.stream()
        .collect(Collectors.groupingBy(ej -> ej.getEmployee().getEmployeeId()));

推荐阅读