【发布时间】:2017-01-17 17:20:12
【问题描述】:
有没有一种方法可以遍历 EnumMap,而不会导致每次迭代都创建一个新对象?条目集的迭代器每次都返回一个新条目。我能看到的唯一方法是
for(K k: map.keySet())
foo(k, map.get(k));
澄清这一点是关于 EnumMap 的,它在其 EntrySet 上具有以下迭代器实现
public Map.Entry<K,V> next() {
if (!hasNext())
throw new NoSuchElementException();
lastReturnedEntry = new Entry(index++);
return lastReturnedEntry;
}
【问题讨论】:
-
您自己的解决方案有什么不好?
-
for (V value : map.values()) foo(value);怎么样?除了检索值之外,您似乎没有将键用于任何其他用途。 -
@VGR 公平点。我也需要钥匙。
-
在这种情况下,你就不走运了。您可以编写自己的 EnumMap 实现来执行此操作,但如果您需要返回键和值的东西,但不创建新对象,您的解决方案绝对不会是惯用的。
-
@RealSkeptic 是的,我目前的方法还不错。我很惊讶地发现 EnumMap 实现即使在 Java 8 中也没有很好的 foreach 覆盖。只是在这里确认我的理解并检查是否有更好的方法。