我需要将对(字符串,对象)保存到哈希图中。基本上,我设法填充了哈希图,但是我不知道如何访问存储在内存中的值。
这是我的代码:

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

当我尝试访问哈希图并打印其值时,我只得到了最后一个,我使用以下方法:

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文件读取的for循环中添加到哈希图中的最后一个元素。

目录编号:123450标签:label5

最佳答案

给定一个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]

关于java - 从哈希图读取对象内容,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37681554/

10-10 04:47