java - 要映射的 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对该列表进行分组?
可以在单个流中解决,还是应该以某种方式拆分它还是采用经典解决方案?
解决方案
使用Collectors.groupingBy
:
Map<Integer, List<EmployeeJob>> map =
list.stream()
.collect(Collectors.groupingBy(ej -> ej.getEmployee().getEmployeeId()));
推荐阅读
- java - 掷骰子 4 掷 6 的概率
- php - Doctrine 子查询:[语法错误] 第 0 行,第 270 列:错误:预期的 Doctrine\ORM\Query\Lexer::T_ALIASED_NAME,得到 'SELECT'
- arrays - C中的指针,我很困惑
- python - Google OR-Tools TSP 跨越多天,开始/停止时间
- c# - 如何在 C# 中访问 Inherited UserControl 中的属性?
- ios - 无法将“UITextField”类型的值转换为预期的参数类型
- amazon-web-services - 将 S3 存储桶同步到 Google 云端硬盘
- stdout - 支持的 libvips CLI 输出到 Windows 标准输出的格式
- javascript - 如何减小选择下拉菜单的宽度?
- ruby-on-rails - ActionCable - Puma - Nginx - SSL