On Jun 12, 2013, at 9:45 AM, Peter Levart <peter.lev...@gmail.com> wrote:
> On 06/11/2013 11:06 PM, Mike Duigou wrote: >> On Jun 11 2013, at 09:59 , Remi Forax wrote: >> >>> Hi guys, >>> This mail was originality sent to lambda-lib EG but Brian ask me to also >>> send it here to not forget. >>> >>> We should provide an implementation of forEach for HashMap that avoid to >>> create an Iterator, >>> HashMap is too common to not have it's dedicated implementation >> I assume you mean the forEach on the entrySet. >> >>> (ArrayList by example has its own implementation of forEach). >>> >>> There is also another implementation that should have a specific >>> implementation IdentityHashMap because >>> entrySet() creates map entries on the fly so having a specific >>> implementation that will not allocatin entries will improve performance >>> (a lot for big identity hashmap). >> Are you suggesting adding a IdentityMap.forEach(BiConsumer) or re-using the >> Map.Entry passed to the consumer in entrySet().forEach(Consumer)? > > That's a very good idea. Why not adding the following default method to Map > interface: > > default void forEach(BiConsumer<? super K, ? super V> sink) { > for (Map.Entry<K, V> entry : entrySet()) { > sink.apply(entry.getKey(), entry.getValue()); > } > } > It's already there :-) http://download.java.net/jdk8/docs/api/java/util/Map.html#forEach(java.util.function.BiConsumer) Just need some Map impls to override it. I logged a bug, JDK-8016446, to track it. Paul. > ...and override it in IHM, HM/LHM, CHM with optimal implementations... > > Regards, Peter > >> >> Mike >> >>> cheers, >>> Rémi >