commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jonathan Carlson <joncrl...@yahoo.com>
Subject RE: [Collections] ComparableComparator - nulls OK
Date Fri, 07 Jun 2002 20:27:30 GMT
Wow, why didn't I think of a NullFirst[|Last]Comparator
that wraps another comparator just like the
ReverseComparator does?  I was suggesting something else
that would be much less flexible.

I think your ComparatorUtil idea it would be a nice thing
to have.  I would use it because I think it would improve
the readability of my code, but others might think it is
just fluff.

Jonathan

--- "Jack, Paul" <pjack@sfaf.org> wrote:
> I like the idea of having the functionality provided by 
> NullFirstComparator and NullLastComparator, but I have an
> additional suggestion.
> 
> Currently, all of the classes in the comparators
> subpackage
> are simple, and very useful.  However, it seems that
> they'd
> most often be used in conjunction with each other;
> typically,
> I'd use ReverseComparator with ComparableComparator to
> get
> reverse natural ordering, and I'd probably use a
> NullSomething
> comparator with ComparableComparator to get natural
> ordering
> that accepts nulls.
> 
> So my suggestion is, can we fold these all into one
> static
> utility API?  It would make them much more convenient,
> IMHO.
> I'm thinking of something like:
> 
> public class ComparatorUtils {
> 
>     // same as ComparableComparator.getInstance
>     public static Comparator NATURAL;
> 
>     public static Comparator nullFirst(Comparator c);
>     public static Comparator nullLast(Comparator c);
> 
>     // same as reverseComparator
>     public static Comparator reverse(Comparator c);
> 
>     public static Comparator bean(Comparator c, String
> getterName);
>     public static Comparator transform(Comparator c,
> Transformer t);
> 
> }
> 
> Also, there are operations involving Comparators that I
> use 
> frequently that would be nice to have in the API:
> 
>     public static Object min(Object o1, Object o2,
> Comparator c);
>     public static Object max(Object o1, Object o2,
> Comparator c);
> 
> which would return the higher or lower of the given
> objects 
> according to the comparator.
> 
> Any of this make sense?
> 
> -Paul
> 
> 
> 
> > -----Original Message-----
> > From: Michael A. Smith [mailto:mas@apache.org]
> > Sent: Friday, June 07, 2002 1:00 PM
> > To: Jakarta Commons Developers List
> > Subject: RE: [Collections] ComparableComparator - nulls
> OK
> > 
> > 
> > On Fri, 7 Jun 2002, Eric Pugh wrote:
> > > +1,  In my sorts, having to deal with nulls is
> causing me 
> > difficulties as
> > > well..  Although I could see something like any nulls
> being 
> > ignored as a
> > > type of behavior..  Sort everything, and drop the
> nulls!
> > 
> > consider:  Comparator.compare(null, "x");
> > 
> > how do you drop or ignore the null when doing this
> compare?
> > 
> > 
> > > -----Original Message-----
> > > From: Jonathan Carlson [mailto:joncrlsn2@yahoo.com]
> > > Sent: Friday, June 07, 2002 3:38 PM
> > > To: commons-dev@jakarta.apache.org
> > > Subject: [Collections] ComparableComparator - nulls
> OK
> > > 
> > > 
> > > I'd like to make the case for a ComparableComparator
> that
> > > allows the sorting of nulls to the bottom.  This
> could be a
> > > flag to set on the existing class or another
> Comparator
> > > called something like NullableComparableComparator
> (or
> > > ComparableNullComparator?).
> > 
> > How about something like this:
> > 
> > public class NullFirstComparator implements Comparator
> {
> >   private Comparator c;
> >   public NullFirstComparator(Comparator
> nonNullComparator) {
> >     this.c = nonNullComparator;
> >   }
> >   public int compare(Object a, Object b) {
> >     if(a == b) return 0;
> >     if(a == null) return -1;
> >     if(b == null) return 1;
> >     return c.compare(a,b);
> >   }
> > }
> > 
> > and
> > 
> > public class NullLastComparator implements Comparator {
> >   private Comparator c;
> >   public NullLastComparator(Comparator
> nonNullComparator) {
> >     this.c = nonNullComparator;
> >   }
> >   public int compare(Object a, Object b) {
> >     if(a == b) return 0;
> >     if(a == null) return 1;
> >     if(b == null) return -1;
> >     return c.compare(a,b);
> >   }
> > }
> > 
> > 
> > That allows you to adjust the behavior of comparison to
> null for any 
> > comparator and not just the ComparableComparator.  It
> sounds like in 
> > your case (sorting nulls last using
> ComparableComparator), you'd use:
> > 
> >    new
> NullLastComparator(ComparableComparator.getInstance())
> > 
> > 
> > If that sounds reasonable, I'll add a full
> implementation 
> > (with a better 
> > "Comparator.equals" method) to the list of things on my
> todo list. 
> > 
> > regards,
> > michael
> > 
> > p.s.  I just threw together the above implementations.
> I 
> > wouldn't trust
> > it to actually sort things properly (or even compile)
> -- I may have
> > things reversed or something where nulls go first
> instead of last and
> > vice-versa.
> > 
> > 
> > --
> > To unsubscribe, e-mail:   
> > <mailto:commons-dev-unsubscribe@jakarta.apache.org>
> > For additional commands, e-mail: 
> > <mailto:commons-dev-help@jakarta.apache.org>
> > 
> 
> --
> To unsubscribe, e-mail:  
> <mailto:commons-dev-unsubscribe@jakarta.apache.org>
> For additional commands, e-mail:
> <mailto:commons-dev-help@jakarta.apache.org>
> 


=====
Jonathan Carlson
joncrlsn@users.sf.net
Minneapolis, Minnesota

__________________________________________________
Do You Yahoo!?
Yahoo! - Official partner of 2002 FIFA World Cup
http://fifaworldcup.yahoo.com

--
To unsubscribe, e-mail:   <mailto:commons-dev-unsubscribe@jakarta.apache.org>
For additional commands, e-mail: <mailto:commons-dev-help@jakarta.apache.org>


Mime
View raw message