Go Back   Rhinocerus > Newsgroup > Newsgroup comp.lang.java.* > Newsgroup comp.lang.java.programmer

Reply
 
Thread Tools Display Modes
  #1 (permalink)  
Old 08-03-2012, 06:54 PM
Volker Borchert
Guest
 
Posts: n/a
Default Re: verbose sort

From: v_borchert@despammed.com (Volker Borchert)

Eric Sosman wrote:
> To: bob smith
> From: Eric Sosman <esosman@ieee-dot-org.invalid>
>
> On 8/2/2012 11:37 AM, bob smith wrote:
> > I have some code that sorts a list like so:
> >
> > Vector<String> my_list = new Vector<String>();
> >
> >
> > Comparator<String> c = new Comparator<String>() {
> > @Override
> > public int compare(String object1, String object2) {
> > if (object1 == null)
> > return -1;
> > if (object2 == null)
> > return 1;
> > object1 = object1.toLowerCase();
> > object2 = object2.toLowerCase();
> > return object1.compareTo(object2);
> > };
> > };
> >
> > Collections.sort(my_list, c);
> >
> >
> > This seems like a lot of code for such a common operation. Is there a more

> succinct way of doing this?
>
> Consider using compareToIgnoreCase(). Also, think about what
> happens when two null's are compared: You should return zero rather than
> declaring one of them "less than" the other, because otherwise your

comparator
> is inconsistent (you can have A<B, B<C, but C<A).
>
> public int compare(String s1, String s2) {
> if (s1 == null)
> return s2 == null ? 0 : -1;
> return s2 == null ? +1 : s1.compareToIgnoreCase(s2);
> }


I'd do it as a fastpath and GoF Decorator

public final class NullFirstComparator<T> implements Comparator<T> {
@NonNull
private final Comparator<T> delegate;

public NullFirstComparator(@NonNull final Comparator<T> delegate) {
this.delegate = delegate;
}

public int compare(final T t1, final T t2) {
if (t1 == t2) {
return 0;
} else if (t1 == null) {
return -1;
} else if (t2 == null) {
return 1;
} else {
return delegate.compare(t1, t2);
}
}
}

Collections.sort(my_list, new NullFirstComparator<String>(String.CASE_INSENSITI
VE_ORDER));

--

"I'm a doctor, not a mechanic." Dr Leonard McCoy <mccoy@ncc1701.starfleet.fed>
"I'm a mechanic, not a doctor." Volker Borchert <v_borchert@despammed.com>

--- BBBS/Li6 v4.10 Dada-1
* Origin: Prism bbs (1:261/38)
--- Synchronet 3.16a-Win32 NewsLink 1.98
Time Warp of the Future BBS - telnet://time.synchro.net:24
Reply With Quote
Alt Today
Advertising
 
and become member of Rhinocerus
Standard Sponsored Links

  #2 (permalink)  
Old 08-04-2012, 03:54 AM
Volker Borchert
Guest
 
Posts: n/a
Default Re: verbose sort

Volker Borchert wrote:
> --- BBBS/Li6 v4.10 Dada-1
> * Origin: Prism bbs (1:261/38)
> --- Synchronet 3.16a-Win32 NewsLink 1.98
> Time Warp of the Future BBS - telnet://time.synchro.net:24


Currently it's only an annoying echo. Stop it. Now.

--

"I'm a doctor, not a mechanic." Dr Leonard McCoy <mccoy@ncc1701.starfleet.fed>
"I'm a mechanic, not a doctor." Volker Borchert <v_borchert@despammed.com>
Reply With Quote
 
Reply

Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are Off
Pingbacks are Off
Refbacks are Off




All times are GMT. The time now is 10:06 AM.


Copyright ©2009

LinkBacks Enabled by vBSEO 3.3.0 RC2 © 2009, Crawlability, Inc.