2016-06-07 57 views
1

我需要将对(字符串,对象)保存到散列表中。基本上我设法填充hashmap,但我不知道如何访问存储在内存中的值。 这是我的代码:从hashmaps读取对象内容

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

这是我从快速拨号类采取printSD方法:

public static void printSD (speedDial SD) { 
     System.out.println("Dir.N: " + SD.dirN + " Label: " + SD.label); 

    } 

这是所有50次迭代的输出,这是我在另一个循环中从哈希映射中读取xml文件时添加到哈希映射中的最后一个元素。

Dir.N:123450标签:label5

+0

参见[这里](https://docs.oracle.com/javase/7/docs/api/java/util/HashMap.html#get %28java.lang.Object%29)... – Mena

+0

https://docs.oracle.com/javase/tutorial/collections/interfaces/map.html – ChadNC

回答

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] 
+0

问题是当值是一个对象不是一个整数... – lorenz

+0

@ lorenz以及我的答案适用于对象..... – explv

+0

为HashMap SD我添加在每个领域,即SDs.dirN和SDs.label一个值,所以我的哈希映射将在'n'键的对象与上述对值。问题是如何访问这个对象的值,因为如果我做得到的回应是:[email protected] – lorenz

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

要检索的字符串值,通常被用来作为干将,建议使用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();

希望帮助!

0

SDs.keySet()给你设置的键您的HashMap 您可以使用数值列表

for (String mapKey : SDs.keySet()) { 
    System.out.println("key: "+mapKey+" value: "+ SDs.get(mapKey).toString()); 
} 

你要跟必须写一个toString()fonction您快速拨号