迭代哈希映射和对象

时间:2015-10-21 14:46:45

标签: java

我正在逐步学习如何使用Hashmaps,我有一张地图,我将添加

HashMap( student id, other student records as object() )

我正在尝试使用键检索值。

请参阅下文。

HashMap<String, Object> studentinfo = new HashMap<String, Object>();
List<Object> lstObject = new ArrayList<Object>();

studentinfo.put("student height", 5.01); //Put data in studentinfo hashmap
lstObject.add(studentinfo);


// New items hashmap 
HashMap<String, Object> items = new HashMap<String, Object>();


//Put object in items hashmap
items.put("student id 001",lstObject);  //Store data for 1st id student with  001
items.put("student id 002",lstObject);  //Store data for 2nd id student with 002



for (Map.Entry<String, Object> entry : items.entrySet()) {

            if(entry.getKey().equals("student id 001")){
                  //Get student id for only student id 001

                  System.out.println(entry.getValue());

                  // When i print this out , this is what i get 

                 // [{student height=5.01}]

            }
 }

我如何循环才能获得该值  像这样,例如:

 5.01 // Student id 001

1 个答案:

答案 0 :(得分:0)

要获取存储在键5.01的地图中的值"student height",该列表存储在键"student id 001"下的另一个地图中,您需要进行编码访问该信息。外部地图本身只知道值,如果你将值类型定义为Object,你必须自己投射。

更好的设计可能是用Student对象替换该列表,该对象具有属性height并访问该对象。

但仅仅是为了获取信息,如果您将地图定义为Map<String, List<Map<String, Object>>,则可以直接将列表及其元素作为值进行访问,例如(为简单起见,不处理null):

Double height = (Double)items.get("student id 001").get(0).get("student height");

重申:这是一个尴尬的设计,应该改变,你可能会意识到增加经验和知识。

更好:

class Student {
  double height;

  Student(double h) {
    height = h;
  }
}

Map<String, Student> students = ...;

students.put("student 001", new Student(5.01) );

double height = students.get("student 001").height;

请注意,出于简单原因,我省去了很多代码,例如修饰符,getter / setter,null check等。

另一个注释(此处添加了注释而非格式化注释):

items.put("student id 001",lstObject);  //Store data for 1st id student with  001
items.put("student id 002",lstObject);  //Store data for 2nd id student with 002

这会将相同的列表作为两个键的值,即如果更改列表元素,则会为两个学生ID更改它。