制作地图地图?

时间:2016-10-08 05:20:12

标签: java dictionary arraylist multimap

所以有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);,但它不起作用

2 个答案:

答案 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

提供

在那里,您可以使用相同的键放置多个值并进行修改。它可能比为你自己做的更清洁实现