從Java 8中,這個功能已經存在於庫中,Comparator.nullsLast
:
Collections.sort(coll, Comparator.nullsLast(new YourComparator()));
您當前的比較,因爲它是將工作, 的Comparator.nullsLast
將處理null
元素,讓他們去持續。
如果需要使用Java 7,您可以確保null
值獲得在年底通過返回適當的值從compare
取決於o1
和o2
空,兩者均分類:
- 則返回0
o1
和o2
均爲null
- 返回1,如果是
o1
和null
o2
不
- 返回-1
o1
不null
和o2
是
完整Comparator
類可以這樣進行:
static class UserComparator implements Comparator<User> {
@Override
public int compare(User o1, User o2) {
if (o1 == null) {
return (o2 == null) ? 0 : 1;
}
if (o2 == null) {
return -1;
}
String username1 = o1.getName();
String username2 = o2.getName();
int namecomp = username1.compareTo(username2);
if (namecomp != 0) {
return namecomp;
} else {
Integer useramount1 = o1.getAmount();
Integer useramount2 = o2.getAmount();
return useramount1.compareTo(useramount2);
}
}
}
我也是在您的文章糾正方法簽名。
你可以使用這個比較是這樣的:
Collections.sort(users, new UserComparator());
如果username
和amount
字段都爲空, 那麼你可以申請同樣的理念,那些過於:
static class UserComparator implements Comparator<User> {
@Override
public int compare(User o1, User o2) {
if (o1 == null) {
return (o2 == null) ? 0 : 1;
}
if (o2 == null) {
return -1;
}
String username1 = o1.getName();
String username2 = o2.getName();
if (username1 == null) {
return username2 == null ? 0 : 1;
}
if (username2 == null) {
return -1;
}
int namecomp = username1.compareTo(username2);
if (namecomp != 0) {
return namecomp;
}
Integer useramount1 = o1.getAmount();
Integer useramount2 = o2.getAmount();
if (useramount1 == null) {
return useramount2 == null ? 0 : 1;
}
if (useramount2 == null) {
return -1;
}
return useramount1.compareTo(useramount2);
}
}
你嘗試過關於null元素的分選什麼? – luk2302
是的,它工作正常的非空元素。 –