我已经看到了一些与此有关的问题,但实际上没有一个与我正在尝试做的事情有关的问题。
我需要的示例:
我有一个键(字符串),键(字符串),值(整数):
“盐”,“盐”,0
“盐”,“辣椒”,1
我希望能够拨打电话:
map.get("Salt"), and have it:
A: Return "Salt" and "Pepper"
map.get("Salt").get("Salt")) and have it:
A. Return 0
map.get("Salt").get("Pepper")) and have it:
A. Return 1
我已经尝试了嵌套的Linked / hashmaps,但是添加第二个salt值会覆盖第一个盐...而且我不知道如何拥有它,因此第二个键不会覆盖第一个盐。
答案 0 :(得分:1)
您可以使用Map<String, Map<String, Integer>>
:
Map<String, Map<String. Integer>> map =
new HashMap<>();
添加这样的值:
map.computeIfAbsent("Salt", k -> new HashMap<>())
.put("Salt", 0);
map.computeIfAbsent("Salt", k -> new HashMap<>())
.put("Pepper", 1);
然后,为您的示例:
map.getOrDefault("Salt", emptyMap()).keySet())
map.getOrDefault("Salt", emptyMap()).get("Salt")
map.getOrDefault("Salt", emptyMap()).get("Pepper")
答案 1 :(得分:0)
您可以通过以下课程来实现。参见working code here:
class CustomMap<K1, K2, V>
{
private HashMap<K1, HashMap<K2, V>> map;
public CustomMap()
{
map = new HashMap<>();
}
public void put(K1 key1, K2 key2, V value) {
HashMap<K2, V> lMap = map.get(key1);
if(lMap != null) lMap.put(key2, value);
else
{
lMap = new HashMap<>();
lMap.put(key2, value);
map.put(key1, lMap);
}
}
public Set<K2> get(K1 key) {
HashMap<K2, V> lMap = map.get(key);
return lMap == null ? null : lMap.keySet();
}
public V get(K1 key, K2 key2) {
HashMap<K2, V> lMap = map.get(key);
if(lMap == null) return null ;
return lMap.get(key2);
}
}
以下是使用的示例代码:
CustomMap<String, String, Integer> map = new CustomMap<>();
map.put("Salt", "Salt", 0);
map.put("Salt", "Pepper", 1);
System.out.println(map.get("Salt"));
System.out.println(map.get("Salt", "Pepper"));
输出:
[Salt, Pepper]
1