fastutil icon indicating copy to clipboard operation
fastutil copied to clipboard

Primitive Comparator.comparing(keyExtractor), like standrad Comparator

Open barakugav opened this issue 1 year ago • 6 comments

https://github.com/vigna/fastutil/issues/312

barakugav avatar Jan 15 '24 15:01 barakugav

Mmmmhh no this will generate a copy of all functions in each generated file.

vigna avatar Jan 15 '24 17:01 vigna

That is the intention.

java.util.Comparator define 5 'comparing' static functions:

static <T, U extends Comparable<U>> Comparator<T> comparing(Function<T, U> keyExtractor);
static <T, U> Comparator<T> comparing(Function<T, U> keyExtractor, Comparator<U> keyComparator);
static <T> Comparator<T> comparingInt(ToIntFunction<T> keyExtractor);
static <T> Comparator<T> comparingLong(ToLongFunction<T> keyExtractor);
static <T> Comparator<T> comparingDouble(ToDoubleFunction<T> keyExtractor);

These methods create a comparator that extract comparable/obj/int/long/double from the T instances and compare them.

I want to provide 5 such functions for each primitive comparator:

IntComparator comparingObj(Int2ObjFunction<Comparable> keyExtractor);
IntComparator comparingObj(Int2ObjFunction<U> keyExtractor, Comparator<U> keyComparator);
IntComparator comparingInt(Int2IntFunction keyExtractor);
IntComparator comparingLong(Int2LongFunction keyExtractor);
IntComparator comparingDouble(Int2DoubleFunction keyExtractor);
ShortComparator comparingObj(Short2ObjFunction<Comparable> keyExtractor);
ShortComparator comparingObj(Short2ObjFunction<U> keyExtractor, Comparator<U> keyComparator);
ShortComparator comparingInt(Short2IntFunction keyExtractor);
...

barakugav avatar Jan 15 '24 18:01 barakugav

@vigna what you think?

barakugav avatar Jan 20 '24 05:01 barakugav

It seems Ok, but I'm in the middle of a deadline and unfortunately I don't have any bandwidth left. I'll be able to check this in a couple of weeks...

vigna avatar Jan 20 '24 09:01 vigna

Ok, but is it necessary to name it comparingObj? Can't it just be named comparing? Or some ambiguity arises?

vigna avatar Feb 07 '24 06:02 vigna

And, it would be nice to have a few unit tests covering the code.

vigna avatar Feb 07 '24 06:02 vigna

@vigna Renamed comparingObj to comparing and added a few tests

barakugav avatar Jul 11 '24 07:07 barakugav