Bikeshed opportunity: compose vs composeWith

Brian Goetz brian.goetz at oracle.com
Tue Nov 27 08:04:19 PST 2012


I like "thenComparing".  Done?

Separately, would "reverseOrder" be better / more consistent for the 
extension method on Comparator than the current "reverse"?  (There's 
already a Collections.reverseOrder static method.)

On 11/27/2012 10:35 AM, Kevin Bourrillion wrote:
> I think it's very helpful for these two names to have parallel structure:
>
> comparingBy / thenBy
>
> or
>
> comparing / thenComparing
>
>
>
>
> On Mon, Nov 26, 2012 at 2:48 PM, Raab, Donald <Donald.Raab at gs.com
> <mailto:Donald.Raab at gs.com>> wrote:
>
>     What about this?
>
>     people.sort(comparing(Person::getLast).thenBy(Person::getFirst))
>
>      > -----Original Message-----
>      > From: Raab, Donald [Tech]
>      > Sent: Monday, November 26, 2012 5:45 PM
>      > To: 'Brian Goetz'; Sam Pullara
>      > Cc: lambda-libs-spec-experts at openjdk.java.net
>     <mailto:lambda-libs-spec-experts at openjdk.java.net>
>      > Subject: RE: Bikeshed opportunity: compose vs composeWith
>      >
>      > Just out of curiosity,I opened up Microsoft Excel and looked how they
>      > word multi-level sorts.
>      >
>      > Sort By -> Column A
>      > Then By -> Column B
>      > Then By -> Column C
>      > Etc.
>      >
>      > So "then" in the wording definitely looks good.  Not sure if there is
>      > anything better than thenCompare.
>      >
>      > This would be cool to read, but is a different animal.
>      >
>      > people.sortBy(Person::getLast).thenBy(Person::getFirst)
>      >
>      > We use the word "chain" on our Comparators static utility class in GS
>      > Collections with varargs.  But since you are adding this method to
>      > Comparator, not sure if chain or chainWith would be a good name.
>      >
>      > > -----Original Message-----
>      > > From: lambda-libs-spec-experts-bounces at openjdk.java.net
>     <mailto:lambda-libs-spec-experts-bounces at openjdk.java.net>
>      > > [mailto:lambda- <mailto:lambda->
>     libs-spec-experts-bounces at openjdk.java.net
>     <mailto:libs-spec-experts-bounces at openjdk.java.net>] On Behalf
>      > > Of Brian Goetz
>      > > Sent: Monday, November 26, 2012 3:07 PM
>      > > To: Sam Pullara
>      > > Cc: lambda-libs-spec-experts at openjdk.java.net
>     <mailto:lambda-libs-spec-experts at openjdk.java.net>
>      > > Subject: Re: Bikeshed opportunity: compose vs composeWith
>      > >
>      > > I like the "then" convention to indicate sequencing.  In context:
>      > >
>      > > people.sort(comparing(Person::getLast)
>      > >                .thenCompare(comparing(Person::getFirst)))
>      > >
>      > >
>      > >
>      > > On 11/26/2012 3:04 PM, Sam Pullara wrote:
>      > > > How about something that sounds more comparator specific:
>      > > >
>      > > > comparator1.thenCompare(comparator2)
>      > > >
>      > > > Sam
>      > > >
>      > > > On Nov 26, 2012, at 11:57 AM, Kevin Bourrillion
>     <kevinb at google.com <mailto:kevinb at google.com>
>      > > > <mailto:kevinb at google.com <mailto:kevinb at google.com>>> wrote:
>      > > >
>      > > >> So... comparator1.compound(comparator2)?
>      > > >>
>      > > >>
>      > > >> On Mon, Nov 26, 2012 at 11:10 AM, Brian Goetz
>      > > <brian.goetz at oracle.com <mailto:brian.goetz at oracle.com>
>      > > >> <mailto:brian.goetz at oracle.com
>     <mailto:brian.goetz at oracle.com>>> wrote:
>      > > >>
>      > > >>         However, this is the first time I'm noticing that you're
>      > > using
>      > > >>         the name
>      > > >>         compose() not only for function composition, but
>     also for
>      > > >>         forming a
>      > > >>         compound comparator.  Has it been suggested that we not
>      > > reuse the
>      > > >>         compose() name to mean this other thing?  Note that
>     there
>      > > does
>      > > >>         exist a
>      > > >>         compose operation for Comparators, but it's (Function,
>      > > >>         Comparator) ->
>      > > >>         Comparator (Guava puts it in the other order and
>     calls it
>      > > >>         "onResultOf",
>      > > >>         which I'm not recommending).
>      > > >>
>      > > >>
>      > > >>     It has not been suggested until now.  I am fine calling this
>      > > >>     something that does not contain the string "compose".
>       The key
>      > > >>     concept is "I have two comparators, and I want to build a
>      > > >>     dictionary-order comparator for (O1, O2)."
>      > > >>
>      > > >>     I am fine with .compose() for functions.
>      > > >>
>      > > >>     I think .compose(other) is too cryptic for comparators.  I
>      > think
>      > > >>     .composeWith() is better; I can imagine there are other
>     things
>      > > >>     that are also better.  Now taking suggestions.  (Though
>      > > onResultOf
>      > > >>     does not seem better.)
>      > > >>
>      > > >>
>      > > >>
>      > > >>
>      > > >> --
>      > > >> Kevin Bourrillion | Java Librarian | Google, Inc.
>      > > >> |kevinb at google.com <mailto:kevinb at google.com>
>     <mailto:kevinb at google.com <mailto:kevinb at google.com>>
>      > > >>
>      > > >
>
>
>
>
> --
> Kevin Bourrillion | Java Librarian | Google, Inc. |kevinb at google.com
> <mailto:kevinb at google.com>
>


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