一个员工的集合, 先按照员工工号分组,在根据员工工资求和,工资金额类型是String类型,使用stream流程
时间: 2024-10-28 19:11:01 浏览: 17
yuangongguanli.zip_java 员工_java 考勤_员工考勤_工资_考勤 工资
在Java中,如果你有一个员工集合(Employee List),并且员工的工号(ID)和工资(Salary,已知为String类型)需要按照工号分组并计算每个工号对应的总工资,你可以使用Stream API来处理。以下是步骤:
首先,假设你有一个名为`Employee`的类,包含`getId()`和`getSalary()`方法。
```java
class Employee {
private String id;
private String salary;
// getters and setters
public String getId() { return id; }
public String getSalary() { return salary; }
}
List<Employee> employees = ... // 员工列表
```
然后,你可以使用Stream的`groupingBy()`方法按工号分组,`collect()`方法结合`Collectors.reducing()`来计算每个组的工资总额。由于工资是字符串,你需要先转换为数值类型再相加,可以借助`NumberFormat`或第三方库如`Apache Commons Lang`。
```java
import java.text.DecimalFormat;
import java.util.*;
import java.util.stream.Collectors;
Map<String, String> totalSalaries = employees.stream()
.collect(Collectors.groupingBy(Employee::getId, Collectors.reducing("", (a, b) -> {
try {
Number salaryA = new DecimalFormat().parse(a);
Number salaryB = new DecimalFormat().parse(b);
return String.valueOf(salaryA.doubleValue() + salaryB.doubleValue());
} catch (Exception e) {
throw new IllegalArgumentException("Invalid salary format");
}
}, String::concat)));
// 现在totalSalaries是一个Map,键是工号,值是对应工号的工资总和
```
阅读全文