【问题标题】:How to loop through an EntrySet within a HashMap loop in Java?如何在 Java 的 HashMap 循环中遍历 EntrySet?
【发布时间】:2017-06-21 22:47:23
【问题描述】:

我有一个名为“virtuosoMap”的HashMap,结构如下:

{facebook=[[1, 22, 333], [4444, 55555, 66666]], twitter=[[1, 22, 333], [4444, 55555, 66666], [7777777, 22, 55555], [55555, 666666, 22]]}

我正在尝试遍历此地图并获取每个 long[] Array 的第一个数值(即 1 和 4444 用于 facebook),但我在 Eclipse 中遇到以下错误:

Exception in thread "main" java.lang.ClassCastException: java.util.ArrayList cannot be cast to [J at...

这是我目前编写的代码:

for (Map.Entry<String, List<long[]>> virtuosoMapSingle : virtuosoMap.entrySet()) {
   for (long[] virtuosoMapSingleNumbers : virtuosoMapSingle.getValue()) {
      System.out.println(virtuosoMapSingleNumbers.get(0));
   }
}

我错过了什么?

【问题讨论】:

  • 哪一行,确切地,导致了错误?
  • 错误来自本例的第二行:"for (long[] virtuosoMapSingleNumbers : virtuosoMapSingle.getValue()) {"
  • @kiner_shah 我可以,但我觉得其余代码与此示例无关。
  • 数组没有get 方法。
  • @Andrevin 错误实际上并非来自该行,而是来自上面的行。但是你的观点已经被注意到了。

标签: java arrays loops for-loop hashmap


【解决方案1】:

不应该吗:

for (Map.Entry<String, List<long[]>> virtuosoMapSingle : virtuosoMap.entrySet()) {
   for (long[] virtuosoMapSingleNumbers : virtuosoMapSingle.getValue()) {
      System.out.println(virtuosoMapSingleNumbers[0]);
   }
}

【讨论】:

  • 糟糕,我没有阅读已经解决这个问题的评论。
【解决方案2】:

System.out.println(virtuosoMapSingleNumbers.get(0)) 这一行有错误。 virtuosoMapSingleNumbers 的类型实际上是 long[]Array 没有 get 方法。相反,应该使用virtuosoMapSingleNumbers[0]。通过修复该行,您将解决您的问题。

但是java-8 提供了一种与各种集合交互的新方式 - Stream API。可以使用Streams 重写相同的代码:

virtuosoMap.entrySet().stream().
            flatMap(entry -> entry.getValue().stream()).
            forEach(e -> System.out.println(e[0]));

【讨论】:

    【解决方案3】:

    列表显然不包含数组,而是另一个列表。您需要更改类型:

    for (Map.Entry<String, List<List<Long>>> virtuosoMapSingle : virtuosoMap.entrySet()) {
        for (List<Long> virtuosoMapSingleNumbers : virtuosoMapSingle.getValue()) {
          System.out.println(virtuosoMapSingleNumbers.get(0));
         }
    }
    

    当然virtuosoMap的类型必须改成Map&lt;String, List&lt;List&lt;Long&gt;&gt;&gt;

    【讨论】:

    • 你试过代码了吗?我在第一行收到类型不匹配错误“类型不匹配:无法从元素类型 Map.Entry> 转换为 Map.Entry>>”跨度>
    • @TheBigDoubleA :您阅读答案的最后一部分了吗?变量显然包含与它的声明不同的东西。
    猜你喜欢
    • 2018-04-08
    • 2010-12-22
    • 2011-10-08
    • 1970-01-01
    • 2010-10-01
    • 2018-10-15
    • 2011-03-27
    • 2013-01-09
    相关资源
    最近更新 更多