将entrySet转换为数组

时间:2014-07-24 20:25:15

标签: java arrays generics collections map

我想将entrySet()的{​​{1}}转换为Map<String, Statistic>(或ArrayList)。

我试过了:

array

但这会给编译器错误: &#34;无法创建Map.Entry&#34;

的通用数组

即使这样也行不通,但错误相同:

Map.Entry<String, Statistic>[] entries = statisticMap.entrySet().toArray(new Map.Entry<String, Statistic>[0]);

但这有效:

Map.Entry<String, Statistic>[] entries = new Map.Entry<String, Statistic>[1];

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

3 个答案:

答案 0 :(得分:5)

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

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

使用列表可以避免创建泛型数组的问题,并且它还允许您使用Java 7的“菱形运算符”来避免重复类型参数。

答案 1 :(得分:2)

  

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

你可以这样做,虽然很难看。

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

答案 2 :(得分:-1)

好吧,与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++;
}