我有一个名为“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...
我错过了什么?
答案 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>>>