我正在使用Java 1.7。我有下面的地图。
Map<String, String> keyValues = new HashMap<>();
但是地图可以包含以下值。
keyValues.put("one", "value1");
keyValues.put("two", "value2");
OR
keyValues.put("four", "value1");
keyValues.put("two", "value2");
keyValues.put("seven", "value3");
OR
keyValues.put("one", "value1");
keyValues.put("two", "value2");
keyValues.put("three", "value3");
基本上地图可以包含 N 值,其中N是通用的,它可以包含任意数量的值。
我还有一组键值,如下所示。
keys one, two belongs to 12345SRT
keys one, two, three, four belongs to 12345SRTSSS
keys four, two, seven belongs to 764RTYL87
现在,map可以包含上述任何一个键集。
在这种情况下,基于地图中的键集,它必须返回相应的值。
前:
If map contains one and two then it should return 12345SRT.
If map contains four,two and seven then logic should return 764RTYL87.
保留上面的键集和相应值的最佳位置是什么? 我应该考虑枚举吗? 逻辑必须采用map和return值。
最好的方法是什么?
答案 0 :(得分:1)
您可以使用Apache MultiKeyMap
示例
MultiKeyMap multiKeyMap = new MultiKeyMap();
multiKeyMap.put("New York","IBM","Sam");
multiKeyMap.put("Sydney","Infosys","Honey");
multiKeyMap.put("Prague","JP Morgan","Peter");
multiKeyMap.put("Scotland","RBS","Deny");
multiKeyMap.put("Paris","Nomura","Lily");
multiKeyMap.put("Melbourne","Citi Bank","Sandy");
multiKeyMap.put("Aukland","Bank of America","Tommy");
结果地图
类似的问题:How to implement a Map with multiple keys?
编辑:
您可以拥有一个可以拥有N个键的自定义键类。 像
这样的东西Class MyKey{
List<String> keys;
}
Map<MyKey, String> keyValues = new HashMap<>();
同时覆盖适当的地图方法,例如equals
,hashcode
,get
等。
答案 1 :(得分:0)
您可以使用如下:
Map<String, ArrayList<String>> keyValues = new HashMap<String, ArrayList<String>();
keyValues.put("12345SRT",["one","two"]);
keyValues.put("12345SRTSSS",["one", "two", "three", "four"]);
keyValues.put("764RTYL87",["four", "two", "seven"]);
例如:如果你有一个地图对象,其键为“一”和“两个”
String getKey(map){
for (Map.Entry<String, Object> e : keyValues.entrySet()) {
String key = e.getKey();
ArrayList<string> value = e.getValue();
if(value.containsAll(map.keySet())){
return key;
}
}
}
答案 2 :(得分:0)
也许这个?
HashMap<Set<String>, String> multiMap = new HashMap<Set<String>, String>();
Set<String> mk1 = new HashSet<String>();
mk1.add("one");
mk1.add("two");
mk1.add("three");
multiMap.put(mk1, "derp");
Set<String> checker = new HashSet<String>();
checker.add("two");
checker.add("three");
checker.add("one");
if(multiMap.containsKey(checker))
System.out.println(multiMap.get(checker));
尝试运行此功能,看看它是否是您想要的行为。