Overridng compareTo()方法不能正常工作
根据surname
字母顺序排序对象列表有问题:我有课:
public class Osoba implements Comparable { private String name; private String surname; private String nip; private kraj country; public Osoba(String name, String surname, String nip, kraj country) { this.name = name; this.surname = surname; this.nip = nip; this.country = country; } @Override public int compareTo(Osoba o) { String tocompare = o.getsurname(); if (this.surname.equalsIgnoreCase(tocompare)) { return 0; } else { if (this.surname.compareTo(tocompare) == -1) { return -1; } else { return 1; } } } @Override public String toString() { return this.nip + " " +this.surname+ " " + this.name; } public String getsurname() { return surname; } }
然后我有了随机生成的人员列表。 我调用Collection.sort(myList)
但它没有对我的列表进行排序。 我究竟做错了什么? 例:
6438088470 Mcpherson Jemima 4728926902 Mcpherson Neville 8093413641 Ballard Neville 8485620409 Mcpherson Neville 6118892423 Ballard Fallon 3110453986 Ballard Sybill 3338278297 Mcpherson Sybill 2797735926 Mcpherson Todd 7473716746 Mcpherson Evelyn 9519145537 Mcpherson Ima After sorting: 6438088470 Mcpherson Jemima 4728926902 Mcpherson Neville 8093413641 Ballard Neville 8485620409 Mcpherson Neville 6118892423 Ballard Fallon 3110453986 Ballard Sybill 3338278297 Mcpherson Sybill 2797735926 Mcpherson Todd 7473716746 Mcpherson Evelyn 9519145537 Mcpherson Ima
根据Comparable
的文档, compareTo
返回:
一个负整数,零或正整数,因为此对象小于,等于或大于指定的对象。
因此,如果a
小于 b
(在排序的自然顺序之前发生 ), a.compareTo(b)
返回负数 ,但不一定是-1
更改
if (this.surname.compareTo(tocompare) == -1)
至
if (this.surname.compareTo(tocompare) < 0)
你应该好。
编辑:
注意:编写此代码的更好,更简单的方法是
@Override public int compareTo(Osoba o) { return this.surname.compareToIgnoreCase(tocompare.getsurname())); }
String.compareTo返回零以上和零以下的所有整个int值。 因此,您的代码应如下所示:
@Override public int compareTo(Osoba o) { if (!this.surname.equalsIgnoreCase(o.getSurname())) { return this.surname.compareToIngoreCase(o.getSurname()); } else { return this.name.compareToIngoreCase(o.getName()); } }
- 如何让Ehcache为无限高速缓存保持堆大小字节数统计?
- 在最初接收的线程之外访问HttpSession
- 如何将double舍入到最接近的整数然后转换为float?
- 如果我在Spark中缓存两次相同的RDD会发生什么
- 带有背景图像的JTextArea的内部填充
- JEditorPane中的可点击HTML链接但是使用replaceSelcetion方法
- `copy(List dest,List src)`和`copy(List dest,List src)之间的区别
- 如何在Play中的静态方法中使用play.cache.CacheApi! 框架2.4.2
- java.lang.NoSuchMethodError:com.google.common.io.Closeables.closeQuietly(Ljava / io / Closeable;)V