computeIfPresent
方法用于在 Map 中,当指定的键存在时,根据指定的键和当前对应的值计算一个新值,并将新值保存回原 Map 中。这个方法通常用于需要更新 Map 中已有键对应的值的情况。
一般情况下,可以在以下情况使用 computeIfPresent
方法:
- 当需要根据已有的键和值来计算新值并更新 Map 中对应键的值时。
- 当需要遍历 Map 中的所有键值对,并根据某种条件更新满足条件的键值对时。
举个例子,假设有一个存储员工工资的 Map,需要根据员工的绩效来调整工资。这时就可以使用 computeIfPresent
方法来根据员工 ID 获取原始工资,根据绩效计算新工资,并更新回 Map 中。
总的来说,computeIfPresent
方法适用于需要根据已有键值对计算新值并更新的场景。
import java.util.HashMap;
import java.util.Map;
public class Main {
public static void main(String[] args) {
// 模拟员工工资的 Map
Map<Integer, Double> salaryMap = new HashMap<>();
salaryMap.put(1, 5000.0);
salaryMap.put(2, 6000.0);
salaryMap.put(3, 7000.0);
// 模拟员工绩效的 Map
Map<Integer, Integer> performanceMap = new HashMap<>();
performanceMap.put(1, 90);
performanceMap.put(2, 80);
performanceMap.put(3, 85);
// 根据绩效调整工资
performanceMap.forEach((employeeId, performance) -> {
salaryMap.computeIfPresent(employeeId, (id, salary) -> {
// 假设绩效高于80分的员工工资增加10%
if (performance > 80) {
return salary * 1.1;
} else {
return salary;
}
});
});
// 输出调整后的工资
salaryMap.forEach((employeeId, salary) -> {
System.out.println("Employee ID: " + employeeId + ", New Salary: " + salary);
});
}
}