commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Tim Moore" <tmo...@blackboard.com>
Subject RE: [Collections] ComparableComparator - nulls OK
Date Fri, 07 Jun 2002 20:18:00 GMT
Yeah, I like the NullFirstComparator and NullLastComparator better than
adding a flag to ComparableComparator.

+1 to all of Paul's suggestions. :-)
-- 
Tim Moore / Blackboard Inc. / Software Engineer
1899 L Street, NW / 5th Floor / Washington, DC 20036
Phone 202-463-4860 ext. 258 / Fax 202-463-4863


> -----Original Message-----
> From: Jack, Paul [mailto:pjack@sfaf.org] 
> Sent: Friday, June 07, 2002 4:10 PM
> To: 'Jakarta Commons Developers List'
> Subject: RE: [Collections] ComparableComparator - nulls OK
> 
> 
> 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>


Mime
View raw message