commons-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Michael A. Smith" <...@apache.org>
Subject RE: [Collections] ComparableComparator - nulls OK
Date Fri, 07 Jun 2002 20:44:32 GMT
On Fri, 7 Jun 2002, Henri Yandell wrote:

> 
> Could this not be:
> 
> public class NullComparator {
> 
>     public NullComparator(int n) {
> // default to Comparable
>     }
> 
> // have a comparator,int argument
> 
>     public int compareTo(Object o1,Object o2) {
>         if(o1 == null) { return n; }
>         if(o2 == null) { return -1 * n; }
>         return internal.compareTo(o1,o2);
>     }
> }
> 
> ie) set the number to return. That way First, Last and Zero can all go in
> the same one?

As Paul and Jonathan have already pointed out, using a 0 will provide 
unstable behavior.  

I would think a boolean would be just as effective:

  public NullComparator(boolean first)

  if(o1 == null) return (first ? -1 : 1);
  if(o2 == null) return (first ? 1 : -1);

regards,
michael

> 
> Hen
> 
> On Fri, 7 Jun 2002, Tim Moore wrote:
> 
> > 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>
> >
> >
> 
> 
> --
> 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>


Mime
View raw message