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


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

Re: verbose sort

Started by"Volker Borchert" <volker.borchert@1:261/38.remove-5qr-this>
First post2012-08-04 18:41 +0000
Last post2012-08-04 18:41 +0000
Articles 2 — 1 participant

Back to article view | Back to comp.lang.java.programmer


Contents

  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

#17142 — Re: verbose sort

From"Volker Borchert" <volker.borchert@1:261/38.remove-5qr-this>
Date2012-08-04 18:41 +0000
SubjectRe: verbose sort
Message-ID<501D6350.56102.calajapr@time.synchro.net>
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

[toc] | [next] | [standalone]


#17162

From"Volker Borchert" <volker.borchert@1:261/38.remove-5qr-this>
Date2012-08-04 18:41 +0000
Message-ID<501D6354.56121.calajapr@time.synchro.net>
In reply to#17142
  To: Volker Borchert
From: v_borchert@despammed.com (Volker Borchert)

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>

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

[toc] | [prev] | [standalone]


Back to top | Article view | comp.lang.java.programmer


csiph-web