在与地图比较时获取重复值

时间:2012-07-10 14:46:25

标签: java javascript java-ee

最初我将在页面中选择学生姓名列表并提交以获取地址详细信息.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;
    }

在与地图比较时,有没有办法避免重复? 非常感谢。

3 个答案:

答案 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());
}
相关问题