forEach on HashMap and IdentityHashMap

Paul Sandoz paul.sandoz at oracle.com
Wed Jun 12 08:20:04 UTC 2013


On Jun 12, 2013, at 9:45 AM, Peter Levart <peter.levart at 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
> 




More information about the core-libs-dev mailing list