Comparator (Java)
Introduction
Null value order (PostgreSQL)
PostgreSQL reference: "By default, null values sort as if larger than any non-null value; that is, NULLS FIRST is the default for DESC order, and NULLS LAST otherwise"
String null-safe comparator
/**
* String case-insensitive comparator that considers <code>null</code>s to be greater than
* non-null.
*/
private static Comparator<String> nullSafeStringComparator = Comparator.nullsLast(
String::compareToIgnoreCase);
Sample usage:
private Comparator<LearningUnitDetail> sortedByLearningUnitName(String order) {
// DOC. LearningUnitDetail.name is Nullable (do not assume it's informed)!
if (ORDER_ASC.equals(order)) {
return Comparator.comparing(LearningUnitDetail::getName, nullSafeStringComparator);
} else {
return Comparator.comparing(LearningUnitDetail::getName, nullSafeStringComparator).reversed();
}
}
Long null-safe comparator
import org.springframework.data.redis.connection.SortParameters;
/**
* Long comparator that considers <code>null</code>s to be greater than
* non-null.
*/
private Comparator<EnrollmentData> sortedByTutor(SortParameters.Order order) {
// DOC. Tutor code is nullable (do not assume it's informed)!
if (SortParameters.Order.ASC == order) {
return Comparator.comparing(EnrollmentData::getTutorCode, Comparator
.nullsLast(Long::compareTo));
} else {
return Comparator.comparing(EnrollmentData::getTutorCode, Comparator
.nullsLast(Long::compareTo)).reversed();
}
}
Sample usage:
private List<EnrollmentData> orderStudentsByTutor(
List<EnrollmentData> enrollmentDataAll) {
Collections.sort(enrollmentDataAll, sortedByTutor(SortParameters.Order.ASC));
return enrollmentDataAll;
}