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());
}
}
...and override it in IHM, HM/LHM, CHM with optimal implementations...
Regards, Peter
Mike
cheers,
Rémi