【问题标题】:Make a map of a map? [closed]制作地图地图? [关闭]
【发布时间】:2016-10-08 05:20:12
【问题描述】:

所以有 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&lt;Integer, Map&lt;String, String&gt;&gt; multiMap = new HashMap&lt;&gt;();

如果我想获得最喜欢的颜色 2,我想做favColor2 = multiMap.get(2).get(color) 或类似的事情。

这是最好的方法吗?我在向地图添加数据时遇到问题。

我无法添加这些数据。它给出了错误。所以我先尝试multiMap.put(1, new HashMap&lt;String, String&gt;());,然后在其中添加“水果”,我尝试multiMap.get(1).put(fruit, apple);,但它不起作用

【问题讨论】:

  • 您正在做的事情确实有效,并且可能是我会这样做的方式,尽管还有其他方式。但是,我投票决定将其作为基于意见的方式结束,因为“这是最好的方法”本质上是一个基于意见的问题。
  • 你的做法是对的……最好的方法……如果是关于地图,我也会这样做……
  • 如果你有一个带有递增整数键的 Map,那么我认为你应该使用 ArrayList 代替
  • 这听起来像是XY Problem。如果您解释您的真正目标是什么,也许我们可以为您指明正确的方向。
  • @nhouser9 是的,对不起,我将我的问题添加到底部的问题中

标签: java dictionary arraylist multimap


【解决方案1】:

这取决于。在您给出的示例中,似乎第二张地图中总会有相同的键。如果是这种情况,我建议使用对象来使其更易于阅读。第一次看代码的新程序员可以通过这种方式更容易地理解它,这是一个很好的做法。我建议如下代码:

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<>();

【讨论】:

    【解决方案2】:

    我的意思是你总是可以重新发明轮子,但你也可以使用 MultiMap ,例如由Guava提供

    在那里,您可以使用相同的键放置多个值并对其进行修改。这可能是一个比自己做所有事情更干净的实现

    【讨论】:

      猜你喜欢
      • 2022-11-19
      • 1970-01-01
      • 2013-11-07
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2015-06-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多