有两个键的地图

时间:2011-09-27 14:21:00

标签: java string map key concat

  

可能重复:
  How to implement a Map with multiple keys?
  Multiple Keys to Single Value Map Java

我必须根据两个传入的字符串属性获取枚举的值。我一直在做这个单值的映射。现在我面临着连接。有没有办法让地图有两个键,我可以

Map.get("attr1","attr2");

这将返回正确的枚举。或者我只需要连接所有可能的值并将其用作键?

我正在寻找吱吱作响的干净解决方案(不是我们所有人:P)

6 个答案:

答案 0 :(得分:3)

好吧,你可以使用Map<String, Map<String, YourEnum>>

我们经常使用它,因此我们自己的Map实现提供了两个键,并在内部使用了map-of-maps方法。

答案 1 :(得分:3)

你可以有一张地图地图,即

Map.get("attr1").get("attr2");

或者你可以使用equals方法定义一个对象,即

Map.get(new MyObject("attr1", "attr2"));

答案 2 :(得分:0)

在这种情况下,我将使用这两个属性创建一个包装类,实现equals()并可能实现ComparablecompareTo委托复合键的两个元素。并使用此类作为地图的关键。

这就像滚动你自己的Pair课程一样。看一下这个问题的答案,详细说明问题:What is the equivalent of the C++ Pair in Java?

答案 3 :(得分:0)

为什么不创建一个包含两个键的类并将其用作映射键?

例如:

public class BiKey implements comparable<BiKey>
{
  private String key1;
  private String key2;

  // getters and setters

  // equals and hash code.

  // implement comparable.
}

Map <BiKey, Blammy> blammyMap; // Blammy is the value type.

答案 4 :(得分:0)

与Thomas的方法类似,我们(在我的工作中)有'Dimensional'地图类,它们是围绕几个地图的简单包装。

public class MultiKeyMap {
  private HashMap<keyOne, Object> keyOneToObjectMap;
  private HashMap<keyTwo, Object> keyTwoToObjectMap;
  ...etc


}

保持所有地图彼此同步非常容易,并且可以在没有大量潜在复杂代码的情况下进行相当快速的搜索。 (但是,这是以增加内存使用为代价的)

答案 5 :(得分:0)

org.apache.commons.collections.map.MultiKeyMap就是你想要的

http://commons.apache.org/collections/apidocs/org/apache/commons/collections/map/MultiKeyMap.html

示例

 private MultiKeyMap cache = MultiKeyMap.decorate(new LRUMap(50));

 public String getAirlineName(String code, String locale) {
   String name = (String) cache.get(code, locale);
   if (name == null) {
     name = getAirlineNameFromDB(code, locale);
     cache.put(code, locale, name);
   }
   return name;
 }