Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.java.programmer > #17142
| 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 | Next — Next in thread | Find similar | Unroll 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