Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > comp.lang.java.programmer > #17142

Re: verbose sort

Path csiph.com!v102.xanadu-bbs.net!xanadu-bbs.net!news.glorb.com!news-out.readnews.com!transit3.readnews.com!news-out.news.tds.net!newsreading01.news.tds.net!53ab2750!not-for-mail
From "Volker Borchert" <volker.borchert@1:261/38.remove-5qr-this>
Subject Re: verbose sort
Message-ID <501D6350.56102.calajapr@time.synchro.net> (permalink)
X-Comment-To All
Newsgroups comp.lang.java.programmer
X-FTN-AREA COMP.LANG.JAVA.PROGRAMMER
X-FTN-MSGID 1:261/38 5743dc23
Content-Type text/plain; charset=IBM437
Content-Transfer-Encoding 8bit
X-Gateway time.synchro.net [Synchronet 3.16a-Win32 NewsLink 1.98]
Lines 85
Date Sat, 04 Aug 2012 18:41:38 GMT
NNTP-Posting-Host 69.21.70.65
X-Complaints-To news@tds.net
X-Trace newsreading01.news.tds.net 1344105698 69.21.70.65 (Sat, 04 Aug 2012 13:41:38 CDT)
NNTP-Posting-Date Sat, 04 Aug 2012 13:41:38 CDT
Organization tds.net
Xref csiph.com comp.lang.java.programmer:17142

Show key headers only | View raw


From: "Volker Borchert" <volker.borchert@1:261/38.remove-yy0-this>

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

--- 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

Back to comp.lang.java.programmer | Previous | NextNext in thread | Find similar | Unroll thread


Thread

Re: verbose sort "Volker Borchert" <volker.borchert@1:261/38.remove-5qr-this> - 2012-08-04 18:41 +0000
  Re: verbose sort "Volker Borchert" <volker.borchert@1:261/38.remove-5qr-this> - 2012-08-04 18:41 +0000

csiph-web