如何在Java中循环HashMap循环中的EntrySet?

时间:2017-02-04 17:26:08

标签: java arrays loops for-loop hashmap

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

row

我正在尝试遍历此地图并获取每个{facebook=[[1, 22, 333], [4444, 55555, 66666]], twitter=[[1, 22, 333], [4444, 55555, 66666], [7777777, 22, 55555], [55555, 666666, 22]]} 的第一个数值(即facebook的1和4444),但我在Eclipse中遇到以下错误:

long[] Array

这是我到目前为止所编码的内容:

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

我错过了什么?

3 个答案:

答案 0 :(得分:0)

不应该是:

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

答案 1 :(得分:0)

此行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]));

答案 2 :(得分:-1)

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

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

当然,virtuosoMap的类型必须更改为Map<String, List<List<Long>>>