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;

  }