如何使用三个值获取HashMap值

and*_*nnn 24 java hashmap

如果我有一个带有这样一个键的HashMap: [pubDate, title, link]和这样的值(例子):

[Thu, 03 Jan 2013 21:50:02 +0100, Transferts - YBX : ''Je change de dimension'', http://www.link.fr/info/link_informations.html]
Run Code Online (Sandbox Code Playgroud)

我可以检索链接http://www.link.fr/info/link_informations.html吗?码:

    for (int i = 0; i < nl.getLength(); i++) {
                    // creating new HashMap
                    map = new HashMap<String, String>();
                    Element e = (Element) nl.item(i);
                    // adding each child node to HashMap key => value
                    map.put(KEY_TITLE, parser.getValue(e, KEY_TITLE));
                    map.put(KEY_LINK, parser.getValue(e, KEY_LINK));

                    map.put(KEY_DATE, parser.getValue(e, KEY_DATE));
                    //map.put(KEY_DESC, parser.getValue(e, KEY_DESC));

                    // adding HashList to ArrayList
                    menuItems.add(map);
 }
Run Code Online (Sandbox Code Playgroud)

ndm*_*m13 36

我刚遇到同样的问题,决定将我的密钥映射到一个条目.这允许由地图提供的相同索引特征,同时具有与键相关联的多个属性.我认为这是一个更简洁的解决方案,可以创建一个单独的类或嵌套映射.

Map<String, Entry<Action, Boolean>> actionMap = new HashMap<String, Entry<Action, Boolean>>();

actionMap.put("action_name", new SimpleEntry(action, true));
Run Code Online (Sandbox Code Playgroud)

要在以后使用这些数据:

Entry<Action, Boolean> actionMapEntry = actionMap.get("action_name");

if(actionMapEntry.value()) actionMapEntry.key().applyAction();
Run Code Online (Sandbox Code Playgroud)

我个人使用的是一个命名函数的地图.通过名称选择函数后,将运行该函数,并且布尔值将确定在处理中是否需要清理.

  • 我知道已经过去了几年,但我觉得这些信息对于那些仍在寻找解决方案的人来说很有用。 (2认同)

SJu*_*n76 22

您创建一个对象,该对象将键的所有三个子键都保存为属性.确保落实equalshashCode正确.

public class MyKey {
  public MyKey(String subkey1, String subkey2, String subkey3) {
    ...
  }
}
Run Code Online (Sandbox Code Playgroud)

使用此类对象作为地图的关键字:

Map<MyKey, String> myMap = ....;
myMap.get(new MyKey("Thu", "03 Jan 2013 21:50:02 +0100", "Transferts - YBX"));
Run Code Online (Sandbox Code Playgroud)

玩得开心!