【问题标题】:How can I convert a HashMap<String, ArrayList<String>> to a HashMap<String, String[]>?如何将 HashMap<String, ArrayList<String>> 转换为 HashMap<String, String[]>?
【发布时间】:2015-06-29 15:36:38
【问题描述】:

我有一个HashMap&lt;String, ArrayList&lt;String&gt;&gt;。我正在尝试将其转换为HashMap&lt;String, String[]&gt;

HashMap<String, ArrayList<String>> arrayListMap = new HashMap<>();
HashMap<String, String[]> arrayMap = new HashMap<>();
for (Map.Entry<String, ArrayList<String>> entry : arrayListMap.entrySet()) {
    arrayMap.put(entry.getKey(), entry.getValue().toArray());
}

但是,对于 entry.getValue().toArray(),我的 IDE 给了我错误:

Wrong 2nd argument type. Found: 'java.lang.Object[], required 'java.lang.String[]'.

我不知道为什么,因为arrayListMap 指定我将与Strings 合作。

为什么这不起作用,我该如何解决?

【问题讨论】:

  • 你能发布一个存储在条目(键和值)中的sn-p吗?
  • @DmitryZaitsev:我没有看到 XY 问题;想要在列表和数组之间进行转换是一个非常特殊的用例,以至于他们在 API 中包含了对它的支持。
  • @Makoto 一般来说,使用集合优于使用数组。与使用数组相比,您可以使用列表做更多的事情。因此,进行转换可能是一个坏主意。应该修改在地图中期望数组的代码以期望列表。
  • 我同意。但是,如果 OP 解释了为什么他想要进行这种转变,我们可以引导他采取最佳策略。可能是 XY 问题。
  • 将 ArrayList 转换为数组比不这样做需要更多时间(O(n))。并且访问 ArrayList 的元素(由数组支持)并不比直接访问数组慢很多。所以我会继续使用 List,并且只有在您确实有性能问题并且可以证明转换为数组可以解决它时才尝试优化。

标签: java arrays string arraylist hashmap


【解决方案1】:

ArrayList 重载了toArray 方法。

第一个表单toArray() 将返回一个Object[]。这不是您想要的,因为您无法将 Object[] 转换为 String[]

第二种形式,toArray(T[] a) 将返回一个数组,该数组是用你传入的任何数组输入的。

您需要在这里使用第二种形式,以便正确键入数组。

arrayMap.put(entry.getKey(), entry.getValue()
                                  .toArray(new String[entry.getValue().size()]));

【讨论】:

【解决方案2】:
HashMap<String, ArrayList<String>> arrayListMap = new HashMap<>();
        HashMap<String, String[]> arrayMap = new HashMap<>();
        for (Map.Entry<String, ArrayList<String>> entry : arrayListMap.entrySet()) {
            arrayMap.put(entry.getKey(), entry.getValue().toArray(new String[entry.getValue().size()]));
        }

entry.getValue().toArray() 将返回对象数组“object[]”

但是需要String[]。

所以需要使用返回T[]的方法entry.getValue().toArray(T[] a) //generic arg type

【讨论】:

  • 稍微解释一下就会有很长的路要走。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
  • 1970-01-01
  • 1970-01-01
  • 2013-06-17
  • 1970-01-01
  • 2013-05-27
相关资源
最近更新 更多