[英]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.