EnhancedComparatorImpl.java

  1. package no.motif.iter.ordering;

  2. import static no.motif.Base.isNull;
  3. import static no.motif.Base.not;
  4. import static no.motif.Base.notNull;

  5. import java.io.Serializable;
  6. import java.util.Comparator;

  7. import no.motif.f.Predicate;

  8. public class EnhancedComparatorImpl<T> implements EnhancedComparator<T>, Serializable {

  9.     private final Comparator<T> comparator;

  10.     public EnhancedComparatorImpl(Comparator<T> comparator) {
  11.         this.comparator = comparator;
  12.     }

  13.     @Override
  14.     public int compare(T o1, T o2) {
  15.         return comparator.compare(o1, o2);
  16.     }

  17.     @Override
  18.     public EnhancedComparator<T> reversed() {
  19.         return new EnhancedComparatorImpl<>(new OppositeOrderComparator<>(comparator));
  20.     }

  21.     @Override
  22.     public EnhancedComparator<T> first(Predicate<? super T> prioritized) {
  23.         return new EnhancedComparatorImpl<>(new PrioritizingComparator<>(comparator, prioritized));
  24.     }

  25.     @Override
  26.     public EnhancedComparator<T> last(Predicate<? super T> last) {
  27.         return first(not(last));
  28.     }

  29.     @Override
  30.     public EnhancedComparator<T> nullsFirst() {
  31.         return new EnhancedComparatorImpl<>(new PrioritizingComparator<>(new TwoNullsSafeComparator<>(comparator), isNull));
  32.     }

  33.     @Override
  34.     public EnhancedComparator<T> nullsLast() {
  35.         return new EnhancedComparatorImpl<>(new PrioritizingComparator<>(new TwoNullsSafeComparator<>(comparator), notNull));
  36.     }

  37. }