我正在逐步学习如何使用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
答案 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更改它。