最初我将在页面中选择学生姓名列表并提交以获取地址详细信息.StudentNames将存储在studentDetailMapList中。在循环列表中,我将比较学生姓名和AddressDetailsMap以检索addressDetails.But当有同名学生时,第一次迭代返回确切的地址,但第二次迭代发生时,它再次返回第一个学生地址而不是第二个学生地址。它获得重复值
for (i=studentDetailMapList.values().iterator;i.hasNext();)
{
detailMap = (Map)i.Next();
sDetails = (StudentDetails)detailMap.get("Student");
student = sDetails.getRollNo();
StudentAddressDetails studentAddressDetails = getDetailswithAddress(AddressDetailsMap,sDetails);
}
private StudentAddressDetails getDetailswithAddress(Map AddressDetailsMap,sDetails student)
{
StudentAddressDetails addDetails = null;
try{
for(Iterator itr = AddressDetailsMap.values().iterator();itr.hasNext();){
addDetails = (StudentAddressDetails )itr.next();
if( (addDetails != null) && (addDetails.getStudentID().equals(student.getId()))){
return addDetails;
}
}
}catch(Throwable t){
return null;
}
return null;
}
在与地图比较时,有没有办法避免重复? 非常感谢。
答案 0 :(得分:0)
您必须在学生班级中添加UUID并使用它来管理他们的数据
编辑回复
Java's UUID为您提供基本的Java UUID。
您可以管理your own sequence - 这种方式可能有助于使用UNIQUE_ID索引数据库中的学生。
管理ID的最佳方法是:使用HashMap<Integer,Student>
。
答案 1 :(得分:0)
您遇到的问题是您使用的地图数据结构错误。
地图是将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射一个值。
你不能拥有同一个名字的多个地址,你应该使用地图的其他属性,也许是学生ID,甚至列表的索引也应该适用于这种情况。
答案 2 :(得分:0)
AddressDetailsMap
地图的每个键必须是标识符(studentId),而不是学生姓名。
编辑: 在这种情况下,您的方法应如下所示:
private StudentAddressDetails getDetailswithAddress(Map AddressDetailsMap,sDetails student) {
return AddressDetailsMap.get(student.getStudentID());
}