【问题标题】:Error when adding a value to Map<String, ArrayList<String>>向 Map<String, ArrayList<String>> 添加值时出错
【发布时间】:2016-01-08 16:24:10
【问题描述】:

我收到了错误

error: incompatible types: String cannot be converted to ArrayList<String>
         crazyMap.put(company, day);

当我运行这段代码时

Map<String, ArrayList<String>> crazyMap = new HashMap<String, ArrayList<String>>();
String company = "myCompany";
String day = "Monday";
crazyMap.put(company, day);

如何格式化“day”参数以满足类型错误?

【问题讨论】:

  • 创建一个ArrayList,将String添加到其中,将列表添加到地图中。

标签: java dictionary arraylist hashmap


【解决方案1】:

您对数据结构的目标是什么?

crazyMap 是否应该像您在上面尝试添加的那样存储映射到一天的公司?如果是这样,请尝试:

Map<String, String> crazyMap = new HashMap<String, String>();
String company = "myCompany";
String day = "Monday";
crazyMap.put(company, day);

或者您希望 crazyMap 拥有一家可以映射到多天的公司?像这样的:

Map<String, Collection<String>> crazyMap = new HashMap<String, Collection<String>>();
Collection<String> days = new ArrayList<String>();
days.add("Monday");
crazyMap.put("myCompany", days);

【讨论】:

    【解决方案2】:

    我建议不要自己为ArrayList 烦恼,而是建议使用为多个值设计的现有类型:Guavas Multimap (explanation;JavaDoc)。

    不要这样做:

    Map<String, ArrayList<String>> crazyMap = new HashMap<>();
    crazyMap.put("myCompany", new ArrayList<>(Arrays.asList("Monday")));
    

    你可以这样做:

    Multimap<String, String> crazyMap = ArrayListMultimap.create();
    crazyMap.put("myCompany", "Monday");
    

    这也避免了丑陋的东西,例如:

    ArrayList<String> items; 
    if (crazyMap.containsKey("myCompany")) {
        items = crazyMap.get("myCompany");
    } else {
        items = new ArrayList<>();
    }
    items.add("Tuesday");
    crazyMap.put("myCompany", items);
    

    Guava 关心为您创建集合,如果它不存在的话。只需致电:

    crazyMap.put("myCompany", "Tuesday");
    

    一切都完成了。

    一个缺点是,使用的接口是MultiMap,它没有扩展Map。这意味着您必须将变量类型“弱化”为MultiMap,例如:

    public void someMethod(MultiMap<K, V> multimap)
    

    代替:

    public void someMethod(Map<K, Collection<V>> multiMap)
    

    在此处阅读有关差异的更多信息:"Multimap Is Not A Map"


    您可以在maven repository 上找到最新版本的 Guava。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-10-22
      • 2014-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多