将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转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何将哈希图转换为条目数组[重复]

10个JavaScript代码片段,使你更加容易前端开发。

10个JavaScript代码片段,使你更加容易前端开发。

如何将此 JavaScript 代码片段翻译成 Parenscript?

如何将变量转换为数组

如何将 BVH 节点对象转换为简单数组?