、この機能は、すでにComparator.nullsLast
で、ライブラリ内に存在します。
Collections.sort(coll, Comparator.nullsLast(new YourComparator()));
そのままあなたの現在のコンパレータは動作しますが、 Comparator.nullsLast
はnull
要素を処理し、それらが行くようになります最終。
は、Java 7を使用する必要がある場合、あなたはnull
値がo1
とo2
のヌル-ITYに応じてcompare
から適切な値を返すことで終わりにソートしますことを確認することができます:
o1
がnull
で、o2
が 0でない場合
o1
と
o2
は両方
null
- リターン1であれば0を返します
- リターン-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);
}
}
}
また、私はあなたのポストにメソッドシグネチャを修正しました。 username
とamount
フィールドがNULL可能で、 両方ある場合、あなたはあまりにもそれらに同じ概念を適用することができ
Collections.sort(users, new UserComparator());
:
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
はい、null以外の要素に対しては正常に動作しています。 –