所以有3层。我有一个键,值对映射,其中值是另一个映射。第二个映射具有键值对,其中值只是值。
所以每个键都有另一个键与它配对,第二个键有值。
这是我尝试的:
Map<Integer, Map<String, String>> multiMap = new HashMap<>();
所以例如:这是我需要放在地图中的数据:
1 => fruit => apple
=> color => red
=> day => friday
2 => fruit => orange
=> color => blue
=> day => monday
3 => fruit => banana
=> color => red
=> day => thursday
所以,如果我做Map<Integer, Map<String, String>> multiMap = new HashMap<>();
如果我想获得2的最喜欢的颜色,我想做favColor2 = multiMap.get(2).get(color)
或类似的东西。
这是最好的方法吗?将数据添加到地图时遇到问题。
我无法添加这些数据。它给出了错误。所以我首先尝试multiMap.put(1, new HashMap<String, String>());
,然后添加&#34;水果&#34;我尝试multiMap.get(1).put(fruit, apple);
,但它不起作用
答案 0 :(得分:4)
这取决于。在您给出的示例中,似乎第二个映射中始终存在相同的键。如果是这种情况,我建议使用一个对象,以使其更容易阅读。第一次查看代码的新程序员可以通过这种方式理解它,这是一个很好的做法。我建议使用以下代码:
public enum Fruit {
APPLE, ORANGE, BANANA;
@Override
public String toString(){
// If needs be, override it and return a String for the fruit
}
}
对日期和颜色执行相同操作,然后创建值对象:
public class MapInfo{
private Fruit fruit;
private Color color;
private Day day;
public MapInfo(Fruit fruit, Day day, Color color){
this.fruit = fruit;
this.day = day;
this.color = color;
}
// Create accessors here
// Add a toString if needed
}
然后,你的Map对象将是
Map<Integer, MapInfo> map = new HashMap<>();
答案 1 :(得分:1)
我的意思是你总是可以重新发明轮子,但你也可以使用MultiMap,例如由Guava
提供在那里,您可以使用相同的键放置多个值并进行修改。它可能比为你自己做的更清洁实现