所以有3层。我有一个键,值对的映射,其中的值是另一个映射。第二个映射有键,值对,其中值就是值。
因此每个键都有另一个键与之配对,并且第二个键具有值。
这就是我所尝试的:
Map<Integer, Map<String, String>> multiMap = new HashMap<>();例如:这是我需要放入map中的数据:
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>());,然后添加了“水果”,我尝试了multiMap.get(1).put(fruit, apple);,但它不起作用
发布于 2016-10-08 13:35:35
那得看情况。在您给出的示例中,似乎在第二个映射中总是有相同的键。如果是这样的话,我会建议使用对象来代替,以使其更容易阅读。第一次查看代码的新程序员可以通过这种方式更容易地理解它,这是一个很好的实践。我建议使用如下代码:
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<>();发布于 2016-10-08 13:48:23
我的意思是,你可以重新发明轮子,但你也可以使用Guava提供的MultiMap
在那里,您可以使用相同的键放置多个值,并对其进行修改。这可能是一种更干净的实现,而不是自己做这一切
https://stackoverflow.com/questions/39928954
复制相似问题