将entrySet转换为数组
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了将entrySet转换为数组相关的知识,希望对你有一定的参考价值。
我想将entrySet()
的Map<String, Statistic>
转换为array
(或ArrayList)。
我尝试过:
Map.Entry<String, Statistic>[] entries = statisticMap.entrySet().toArray(new Map.Entry<String, Statistic>[0]);
但这会导致编译器错误:“无法创建Map.Entry的通用数组”
即使这仍然行不通,并出现相同的错误:
Map.Entry<String, Statistic>[] entries = new Map.Entry<String, Statistic>[1];
但是这可行:
Map.Entry[] entries = new Map.Entry[1];
任何想法如何创建这样的数组或列表?
答案
任何想法如何创建这样的数组或列表?
尽管丑陋,您也可以这样做。
Map.Entry<String, Statistic>[] entries =
(Map.Entry<String, Statistic>[]) new Map.Entry[num];
另一答案
如果您愿意获取列表而不是数组,则可以执行此操作:
List<Map.Entry<String, Statistic>> list = new ArrayList<>(map.entrySet());
使用列表避免了创建泛型数组的问题,它还使您可以使用Java 7的“钻石运算符”来避免重复类型自变量。
另一答案
嗯,与C#相比,复杂性的根本原因是Java设计已损坏,在C#中,Array和List没有实现相同的接口。因此,任何解决方案都将是丑陋的(并且会降低性能)。
如果丑陋,我个人更喜欢显式的解决方案,至少您可以看到实际的情况。
因此,我的丑陋版本是:
Map.Entry<String, String>[] keys = new Map.Entry[map.entrySet().size()];
int index = 0;
for (Map.Entry<String, String> entry: map.entrySet()) {
keys[index] = entry;
index++;
}
以上是关于将entrySet转换为数组的主要内容,如果未能解决你的问题,请参考以下文章