vigna / fastutil

fastutil extends the Java™ Collections Framework by providing type-specific maps, sets, lists and queues.
Apache License 2.0
1.76k stars 196 forks source link

Add collectors for Maps #256

Open shawjef3 opened 3 years ago

shawjef3 commented 3 years ago

This adds collectors for Stream to fastutil Maps.

Future improvements would be to investigate supporting primitive streams (e.g. IntStream) and improving the type signature for collectors where char is the key or value. When char is the key, the functions are for int. When char is the value, the functions are for Object.

Also there is boxing that could be avoided using more specialized function types, like Int2IntFunction instead of ToIntFunction<Integer>.

vigna commented 3 years ago

I won't be able to look at this for a couple of weeks as I'll be travelling. Did you use some of the infrastructure for primitive functions (look for PRIMITIVE_FUNCTION in gencsources.sh)?

shawjef3 commented 3 years ago

I tried to use JDK_PRIMITIVE_FUNCTION, but ran into many places it didn't fit. For instance, in Byte2BooleanMaps, the collector needs Object2ByteFunction<T> for the keys, and Predicate<T> for the values. However, JDK_PRIMITIVE_FUNCTION gives IntPredicate, which isn't applicable to the collector.

shawjef3 commented 3 years ago

@vigna just a reminder to get eyes on this.

vigna commented 2 years ago

Ahem, I know I'm late, but I'm on vacation now. I'll be back to work in full in a couple of weeks.

vigna commented 2 years ago

So, the way we did that for other containers is quite different—see, e.g., toSet() in OpenHashSet.drv. It would be better to try to follow the same scheme.