1

最初,我将在页面中选择学生姓名列表并提交以获取地址详细信息。学生姓名将存储在 studentDetailMapList 中。在遍历列表时,我会将学生姓名与 AddressDetailsMap 进行比较以检索地址详细信息。但是当有同名的学生时,第一次迭代返回确切的地址,但是当第二次迭代发生时,它再次返回第一个学生地址而不是第二个学生地址。它正在获取重复值

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;
    }

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

4

3 回答 3

0

地图的每个键都AddressDetailsMap必须是标识符 (studentId) 而不是学生姓名。

编辑:在这种情况下,您的方法应如下所示:

private StudentAddressDetails getDetailswithAddress(Map AddressDetailsMap,sDetails student) {
          return AddressDetailsMap.get(student.getStudentID());
}
于 2012-07-10T15:04:10.107 回答
0

您必须在学生的班级中添加一个 UUID 并使用它来管理他们的数据

编辑回应

Java 的 UUID为您提供了基本的 Java 的 UUID。

您可以管理自己的序列- 这种方式可能有助于使用 UNIQUE_ID 在数据库中索引学生。

管理您的 ID 的最佳方法是:使用HashMap<Integer,Student>.

于 2012-07-10T15:00:17.207 回答
0

您遇到的问题是您使用的地图数据结构错误。

映射是将键映射到值的对象。地图不能包含重复的键;每个键最多可以映射到一个值。

您不能有多个同名地址,您应该使用地图的其他属性,也许是学生 ID,甚至列表的索引也应该在这种情况下工作。

于 2012-07-10T15:03:16.700 回答