Comparator/Comparators API change proposal

Michael Hixson michael.hixson at gmail.com
Mon Jun 3 17:07:51 PDT 2013


Hi Henry,

1. Does this code throw an NPE?  It's not clear from the docs.

  int result = Comparators
      .nullsFirst(c1)
      .thenComparing(c2)
      .compare(null, null);

2. How did you decide which static methods should live on Comparator
versus Comparators?

3. There are a couple of awkward-sounding parts in the docs, e.g. "Try
to compare null with returned comparator will throw
NullPointerException."  Do you want me (and/or others) to suggest
concrete changes here, in this thread?

-Michael

On Mon, Jun 3, 2013 at 2:33 PM, Henry Jen <henry.jen at oracle.com> wrote:
> Hi,
>
> Static interface method support has being available for a while, it
> seems reasonable to move a couple methods from Comparators into Comparator.
>
> Also it is recommended to rename Function-variant comparing to according
> primitive type to eliminate ambiguity for lambda cases like following,
>
> <T,R> Comparator<T> comparing(Function<T,R> f);
> <T> Comparator<T> comparing(ToIntFunction<T> f);
>
> Comparator<String> c = comparing(s -> s.size());
>
> So here is what we are proposing,
>
> 1. Move all Comparators.comparing to Comparator.comparing
> 2. Rename various comparing methods to comparing, comparingInt,
> comparingLong and comparingDouble accordingly.
> 3. Same renaming apply to Comparator.thenComparing
>
> Other than that, we have
>
> 1. move Comparators.naturalOrder() and reverseOrder() to Comparator.
> Basically, static factory method should be in Comparator. Convenient
> helper/combinator methods such as byKey/byValue should be in Comparators.
> 2. rename Comparator.reverseOrder() default method to reverse(), it's
> simply reverse form of the comparator.
> 3. Add nullsFirst(Comparator cmp) and nullsLast(Comparator cmp) into
> Comparators as helper function to wrap up a comparator to be null-friendly.
>
> Specdiff can be found at
>
> http://cr.openjdk.java.net/~henryjen/ccc/8009736.1/specdiff
>
> Thoughts?
>
> Cheers,
> Henry


More information about the lambda-libs-spec-observers mailing list