我需要将对(字符串,对象)保存到hashmap中。基本上我设法填充hashmap但我不知道如何访问存储在内存中的值。 这是我的代码:
HashMap<String, speedDial> SDs = new HashMap<String, speedDial>();
speedDial sd = new speedDial();
SDs.put(String.valueOf(temp),sd); whre temp is my index and sd my object
然后我将数据填入sd,从xml文件中读取它们。
当我使用eclypse调试项目时,我可以看到值正确存储到内存中,但我不知道如何检索与该对象关联的字符串值,请参阅下面的SD对象格式
class speedDial{
String label, dirN;
speedDial (String l, String dN) {
this.label = l;
this.dirN = dN;
}
}
见下图:它突出显示我正在尝试访问的数据! enter image description here
当我尝试访问hashmap并打印它的值时,我只得到最后一个,我使用以下内容:
for ( int k = 0; k <50; k++) {
speedDial.printSD(SDs.get(String.valueOf(k)));
}
这是我从speedDial类中获取的printSD方法:
public static void printSD (speedDial SD) {
System.out.println("Dir.N: " + SD.dirN + " Label: " + SD.label);
}
这是所有50次迭代的输出,这是我在另一个循环中添加到散列图中的最后一个元素,用于从xml文件中读取。
Dir.N:123450标签:label5
答案 0 :(得分:1)
给定HashMap,例如:
SpeedDial speedDial1 = new SpeedDial("test1", "test2");
SpeedDial speedDial2 = new SpeedDial("test3", "test4");
SpeedDial speedDial3 = new SpeedDial("test5", "test6");
HashMap<String, SpeedDial> exampleHashMap = new HashMap<>(3);
exampleHashMap.put("key1", speedDial1);
exampleHashMap.put("key2", speedDial2);
exampleHashMap.put("key3", speedDial3);
您可以检索给定键的值,如下所示:
SpeedDial exampleOfGetValue = exampleHashMap.get("key1");
System.out.println(exampleOfGetValue.label);
System.out.println(exampleOfGetValue.dirN);
输出:
test1
test2
如果您要检索给定值的键,则可以使用以下内容:
public final <S, T> List<S> getKeysForValue(final HashMap<S, T> hashMap, final T value) {
return hashMap.entrySet()
.stream()
.filter(entry -> entry.getValue().equals(value))
.map(Map.Entry::getKey)
.collect(Collectors.toList());
}
如果你这样调用这个函数:
List<String> exampleOfGetKeys = getKeysForValue(exampleHashMap, speedDial1);
System.out.println(exampleOfGetKeys);
它将输出具有此值的所有键的列表:
[key1]
答案 1 :(得分:0)
以下代码将遍历地图,并将键和值存储在两个列表中。
List<String> keys = new ArrayList();
List<Object> values = new ArrayList();
for (Map.Entry<String, Object> speedDial: SDs.entrySet()) {
Object speedDialValue = speedDial.getValue();
String key= speedDial.getKey();
keys.add(key);
values.add(speedDialValue);
}
要检索字符串值,通常会使用getter,因为建议您使用private
修饰符作为类属性。
public class speedDial{
private String label, dirN;
public speedDial (String l, String dN) {
this.label = l;
this.dirN = dN;
}
public String getLabel(){
return this.label;
}
public String getDirN(){
return this.dirN;
}
}
您可以使用yourObject.getLabel();
或yourObject.getDirN();
希望有所帮助!
答案 2 :(得分:0)
SDs.keySet()
为您提供HashMap的键集
您可以使用
for (String mapKey : SDs.keySet()) {
System.out.println("key: "+mapKey+" value: "+ SDs.get(mapKey).toString());
}
Yous必须为你的speedDial写一个toString()函数