与映射进行比较时获取重复值

Getting duplicate values while comparing with the map

本文关键字:获取 比较 映射      更新时间:2023-09-26

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

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

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

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

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

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

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

编辑响应

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

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

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

AddressDetailsMap映射的每个键都必须是标识符(studentId),而不是学生名称。

编辑:在这种情况下,您的方法应该是这样的:

private StudentAddressDetails getDetailswithAddress(Map AddressDetailsMap,sDetails student) {
          return AddressDetailsMap.get(student.getStudentID());
}