On 06/12/2013 10:20 AM, Paul Sandoz wrote:
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.

Thanks Paul,
By the way, could you add to the description of the bug that if we override Map.forEach for HashMap we also need to override it for LinkedHashMap.

Rémi


...and override it in IHM, HM/LHM, CHM with optimal implementations...

Regards, Peter

Mike

cheers,
Rémi

Reply via email to