WilliSchönbornの答えを拡張するために、私はここに来て、google-collectionsはまさにあなたがここで求めているものだと言いました。
一般的なケースでは、nullを無視するように独自に記述してComparator
(null以外を想定しているため、重要なロジックに集中できます)、Orderingを使用してnullを処理できます。
Collections.sort(addresses, Ordering.from(new AddressComparator()).nullsLast());
ただし、あなたの場合、並べ替えに使用されているのはアドレス(座標)内のデータですよね?この場合、 google-collectionsはさらに便利です。したがって、次のようなものがある可能性があります。
// Seems verbose at first glance, but you'll probably find yourself reusing
// this a lot and it will pay off quickly.
private static final Function<Address, Coordinates> ADDRESS_TO_COORDINATES =
new Function<Address, Coordinates>() {
public Coordinates apply(Address in) {
return in.getCoordinates();
}
};
private static final Comparator<Coordinates> COORDINATE_SORTER = .... // existing
次に、並べ替える場合:
Collections.sort(addresses,
Ordering.from(COORDINATE_SORTER)
.nullsLast()
.onResultOf(ADDRESS_TO_COORDINATES));
そして、それがgoogle-collectionsの力が実際に報われ始めるところです。