我想将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];
如何创建这样的数组或列表?
答案 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++;
}