簡體   English   中英

要映射的Java 8組列表

[英]Java 8 group lists to map

我有一個帶有以下簽名的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;
    }
}

我想要一個List<EmployeeJob>中的Map<Integer, List<EmployeeJob>> ,其中鍵將是Employee類中的employeeId 我如何使用Java 8流按其employee-> employeeId將該列表分組?

可以在單個流中求解,還是應該以某種方式拆分它還是采用經典解決方案?

使用Collectors.groupingBy

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

groupingBy()正是這樣做的:

Map<Integer, List<EmployeeJob>> map = jobs.stream().collect(groupingBy(job -> job.getEmployee().getEmployeeId()));

不幸的是,由於必須經過Employee類,因此不能使用方法引用。

public static void main(String[] args) {

List<EmployeeJob> listEmployees= new ArrayList<>();
System.out.println(listEmployees);//previous list

Map<Integer, List<EmployeeJob>> newMap =
    listEmployees.stream()
        .collect(Collectors.groupingBy(employee->employee.getEmployee().getEmployeeId()));
System.out.println(newMap); // new expected map
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM