如何解决我正在尝试找到每个部门的新员工薪水一步使用Java 8
考虑到员工ID会增加,目的是在部门中找到最新员工的薪水。 我已经编写了一个两步代码,我试图找到一个可以使用java8一步完成此任务的解决方案。
我的过程是:
- 基于该部门中最大的EmployeeId获取“部门”:“最新雇员”的地图
- 使用以前的地图创建“部门”:“最新雇员的薪水”(这是输出)
一步就能做到吗?
public static void main(String[] args) {
List<Employee> employees = new ArrayList<>();
Employee e1 = new Employee(1,1000,"a1","A");
Employee e2 = new Employee(2,1010,"b1","A");
Employee e3 = new Employee(3,"B");
Employee e4 = new Employee(4,500,"b2","B");
Employee e5 = new Employee(5,2000,"C");
Employee e6 = new Employee(6,5000,"C");
employees.add(e1);
employees.add(e2);
employees.add(e3);
employees.add(e4);
employees.add(e5);
employees.add(e6);
//This Map will contain Department and The newest Employee in that Department.
Map<String,Employee> retVal = employees.stream()
.collect(groupingBy(
e -> e.getDepartment(),collectingAndThen(maxBy(comparingInt(e -> e.getEmployeeId())),Optional::get)
));
//This Map will use the previous map to construct a combination of "Department" : "Salary of the newest Member"
Map<String,Integer> map = new HashMap<>();
retVal.entrySet().forEach(stringEmployeeEntry -> {
map.put(stringEmployeeEntry.getKey(),stringEmployeeEntry.getValue().getSalary());
});
}
输出
{
"a1" : 2000,"b1" : 1010,"b2" : 5000,}
解决方法
您可以直接从collectingAndThen
对象映射Employee
中的工资
Map<String,Integer> retVal = employees.stream()
.collect(Collectors.groupingBy(
e -> e.getDepartment(),Collectors.collectingAndThen(
Collectors.maxBy(Comparator.comparingInt(e -> e.getEmployeeId())),e -> e.get().getSalary())
));
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。