将entrySet转换为数组

问题描述 投票:2回答:3

我想将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];

任何想法如何创建这样的数组或列表?

java arrays generics collections map
3个回答
2
投票

任何想法如何创建这样的数组或列表?

尽管丑陋,您也可以这样做。

Map.Entry<String, Statistic>[] entries = 
                          (Map.Entry<String, Statistic>[]) new Map.Entry[num];

5
投票

如果您愿意获取列表而不是数组,则可以执行此操作:

List<Map.Entry<String, Statistic>> list = new ArrayList<>(map.entrySet());

使用列表避免了创建泛型数组的问题,它还使您可以使用Java 7的“钻石运算符”来避免重复类型自变量。


0
投票

嗯,与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++;
}
© www.soinside.com 2019 - 2024. All rights reserved.