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()); } }