Java 如何获得包含三个值的HashMap值

Java 如何获得包含三个值的HashMap值,java,hashmap,Java,Hashmap,如果我有一个带有这样一个键的HashMap: [publidate,title,link]和此类值(示例): 我可以检索链接http://www.link.fr/info/link_informations.html? 代码: for(int i=0;ivalue put(KEY_TITLE,parser.getValue(e,KEY_TITLE)); put(KEY_-LINK,parser.getValue(e,KEY_-LINK)); put(KEY_DATE,parser.getValu

如果我有一个带有这样一个键的HashMap:
[publidate,title,link]
和此类值(示例):

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

for(int i=0;ivalue
put(KEY_TITLE,parser.getValue(e,KEY_TITLE));
put(KEY_-LINK,parser.getValue(e,KEY_-LINK));
put(KEY_DATE,parser.getValue(e,KEY_DATE));
//put(KEY_DESC,parser.getValue(e,KEY_DESC));
//将哈希列表添加到ArrayList
menuItems.add(地图);
}

创建一个对象,该对象将该键的所有三个子键作为属性保存。确保正确实现
等于
哈希代码

public class MyKey {
  public MyKey(String subkey1, String subkey2, String subkey3) {
    ...
  }
}
使用该对象作为地图的关键点:

Map<MyKey, String> myMap = ....;
myMap.get(new MyKey("Thu", "03 Jan 2013 21:50:02 +0100", "Transferts - YBX"));
Map myMap=。。。。;
myMap.get(新的MyKey(“Thu”,“2013年1月3日21:50:02+0100”,“Transferts-YBX”);

玩得开心

您可以创建一个复合键,其中包含您希望在该键中包含的所有值。一种简单的方法是将组成键的值连接在一起,由一个您确定不会出现在键值中的值分隔

例如:

然后,您可以像这样定义地图:

哈希映射


并使用DateAndTitle对象为地图编制索引。

您也可以尝试使用该类型的嵌套hashmap
HashMap
,然后将查询公式化为
map.get(日期).get(标题).get(链接)

最好的解决方案是将这个嵌套hashmap封装在您自己的类中,如下所示:

public class NestedHashmap {
    private Map<String, Map<String, Map<String, String>>> map;

    public NestedHashMap() { 
        map = new HashMap<String, HashMap<String, HashMap<String, String>>>;
    }

    public put(String date, String title, String link, String value){
        if(map.get(date) == null) { 
            map.put(date, new HashMap<String, HashMap<String, String>>;
        }
        if(map.get(date).get(title) == null){
            map.get(date).put(new HashMap<String, String>);
        }
        map.get(date).get(title).put(link, value);
    }

    public get(String date, String title, String link) {
        // ...mostly analogous to put...
    }
}
公共类NestedHashmap{
私人地图;
公共嵌套HashMap(){
map=新HashMap;
}
公共put(字符串日期、字符串标题、字符串链接、字符串值){
如果(map.get(date)==null){
map.put(日期,新HashMap;
}
if(map.get(date).get(title)==null){
map.get(date.put)(新HashMap);
}
map.get(日期)、get(标题)、put(链接、值);
}
公共获取(字符串日期、字符串标题、字符串链接){
//…基本上类似于。。。
}
}

在我的例子中,我发现了另一个解决方案:创建一个ArrayList,并将每个for循环上的所有链接都放在上面。这要简单得多。

我刚刚遇到了同样的问题,决定将我的密钥映射到一个。这允许映射提供相同的索引功能,同时有多个属性与一个密钥关联。我认为这是一个mu创建单独类或嵌套映射的更简洁的解决方案

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

actionMap.put("action_name", new SimpleEntry(action, true));
Map actionMap=newhashmap();
actionMap.put(“action_name”,新的SimpleEntry(action,true));
要稍后使用数据,请执行以下操作:

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

if(actionMapEntry.value()) actionMapEntry.key().applyAction();
Entry actionMapEntry=actionMap.get(“action_name”);
if(actionMapEntry.value())actionMapEntry.key().applyAction();

我个人使用的是命名函数的映射。按名称选择函数后,函数将运行,布尔值将确定处理过程中是否需要清理。

这些类是包含3个成员的类,还是串联字符串,还是其他什么?我不明白它们的键和值是什么。每个条目都有标题、链接和日期,这一点很清楚-但是您将查找什么?您想查找给定标题和日期的链接吗?您想仅基于标题进行查找吗?等等
您创建了一个对象,该对象将键的所有三个值都保存为属性
。如何逐个检索这三个值。将值1放在a中,值2放在b中,值在c中的ue3(示例)?我说的“值”应该是“子键”(现在更正)对我来说很好,谢谢!!,要逐个检索三个值,可以这样做,在类MyKey上添加值的getter,例如:getName(){return this.name;}在key类上拥有所有getter之后,您可以像这样迭代映射并访问其属性:for(MyKey-key:map.keySet()){key.getName();key.getLastName();等等..}@SJuan76这对于复杂性和速度来说都是可怕的。每次你需要在地图中查找一个值时,你都需要构造一个新的键。这样做之后,你可能会扔掉你刚刚制作的键并将其垃圾收集。这根本不是一个理想的解决方案。我知道这已经有几年了,但我觉得这些信息对那些人很有用仍然在寻找解决方案。对我来说效果很好。在海事组织,
Map
很难阅读
final class DateAndTitle {
  private final Date pubDate;
  private final String title;

  @Overrde
  boolean equals(Object rhs) {
    // let eclipse generate this for you, but it will probably look like ...
    return rhs != null && rhs.getClass() == getClass() &&
      pubDate.equals(rhs.pubDate) && title.equals(rhs.title);
  }

  @Overrde
  int hashCode(Object) {
    // let eclipse generate this for you...
    ...
  }
}
public class NestedHashmap {
    private Map<String, Map<String, Map<String, String>>> map;

    public NestedHashMap() { 
        map = new HashMap<String, HashMap<String, HashMap<String, String>>>;
    }

    public put(String date, String title, String link, String value){
        if(map.get(date) == null) { 
            map.put(date, new HashMap<String, HashMap<String, String>>;
        }
        if(map.get(date).get(title) == null){
            map.get(date).put(new HashMap<String, String>);
        }
        map.get(date).get(title).put(link, value);
    }

    public get(String date, String title, String link) {
        // ...mostly analogous to put...
    }
}
Map<String, Entry<Action, Boolean>> actionMap = new HashMap<String, Entry<Action, Boolean>>();

actionMap.put("action_name", new SimpleEntry(action, true));
Entry<Action, Boolean> actionMapEntry = actionMap.get("action_name");

if(actionMapEntry.value()) actionMapEntry.key().applyAction();