从另一个地图更新地图中的值 我所理解的你的问题给定映射

我有一张地图 AdmissionData< String,AdmissionData >,可以将学生 ID 映射到他的录取详细信息。

AdmissionData {  String joinDate; String sequenceID; String standard }

从这张地图中,我需要为每个学生更新主地图 StudentData<String,StudentData > 上每个学生的详细信息。

StudentData {............ ;String joinDate; String sequenceID; String standard }

有效实现这一目标的最佳方法是什么?

songyish 回答:从另一个地图更新地图中的值 我所理解的你的问题给定映射

您可以使用 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

大家都在问