您可以使用 AdmissionData
和 迭代 forEach
映射。使用 computeIfPresent
更新
StudentData
地图
admissionData.forEach((key,value) -> {
studentData.computeIfPresent(key,(existingKey,existingValue) -> /*logic */);
});
,
我所理解的你的问题
- 您有一个地图 admissionMap 包含条目:
String
(student-id) 映射到 AdmissionData
对象
- 您有另一个地图 masterMap 包含条目:
String
(student-id) 映射到 StudentData
对象
- 您想使用地图 admissionMap(源)中相关(通过学生 ID)对象的某些属性更新地图 masterMap(目标)上的对象
如何做到这一点?
给定
这些带有一些值的映射,其中的键是相关的 (student-id) 并且可以匹配。
Map<String,AdmissionData> admissionMap;
Map<String,StudentData> masterMap;
AdmissionData
类有一些属性
public class AdmissionData {
String joinDate;
String sequenceID;
String standard
// getter and setter omitted
}
其中一些也在 StudentData
类中:
public class StudentData {
// other properties
// properties with same name and contents as in class AdmissionData
String joinDate;
String sequenceID;
String standard
// getter and setter omitted
}
映射
可以使用带有 forEach
的 Java 8 流和使用 computeIfPresent
或传统方式的条件映射更新来完成:
admissionData.forEach((key,value) -> {
// update only if sudent-id is present as key
if (studentData.containsKey(key)) {
StudentData existingStudent = studentData.get(key);
// update the fields: set with values from AdmissionData
existingStudent.setJoinDate(value.getJoinDate());
existingStudent.setSequenceID(value.getSequenceID());
existingStudent.setStandard(value.getStandard());
}
});
实际映射(值的复制)是用上面的语句完成的,比如 existingStudent.setX(value.getX());
,其中 value
是类型为 AdmissionData
的源条目,它具有相同的属性,名为 {{1} }(也是同样的类型!)。
本文链接:https://www.f2er.com/34333.html