15-Comparator

2020-02-03  本文已影响0人  鹏程1995

类介绍

类代码解析

int compare(T o1, T o2);

比较o1,o2,返回的结果为int result

注意:返回的结果不止有正负限制,最好绝对值相同。比如正负一。

default Comparator<T> reversed()

返回一个比较器,比较的结果是原来的相反数。其实实现也挺好实现的,包装一个装饰类就好。

public static <T extends Comparable<? super T>> Comparator<T> reverseOrder();

返回和正常比较顺序相反一个比较器

public static <T extends Comparable<? super T>> Comparator<T> naturalOrder();

返回和正常比较顺序相同的一个比较器

default Comparator<T> thenComparing(Comparator<? super T> other);

return (Comparator<T> & Serializable) (c1, c2) -> {
            int res = compare(c1, c2);
            return (res != 0) ? res : other.compare(c1, c2);
        };

default <U> Comparator<T> thenComparing(Function<? super T, ? extends U> keyExtractor,Comparator<?super U> keyComparator)

执行结果和上一个函数相似。

区别是,在使用本比较器结果是相等时,在调用传入的比较器前会先调用方法keyExtractor对等待比较的对象进行处理

default <U extends Comparable<? super U>> Comparator<T> thenComparing(Function<? super T, ? extends U> keyExtractor)

处理思路:

  1. 先调用本比较器进行比较
  2. 比较失败后,调用传入的函数对对象进行处理
  3. 然后使用对象本身的compareTo()进行比较

default Comparator<T> thenComparingInt(ToIntFunction<? super T> keyExtractor)

处理思路:

  1. 先调用本比较器进行比较
  2. 比较失败后,调用keyExtractor()方法对待处理对象进行处理。处理结果为整数
  3. 然后调用整数的比较方法进行比较

default Comparator<T> thenComparingLong(ToLongFunction<? super T> keyExtractor);

Long

default Comparator<T> thenComparingDouble(ToDoubleFunction<? super T> keyExtractor);

Double

public static <T> Comparator<T> nullsFirst(Comparator<? super T> comparator);

做了一次封装。null不抛异常,认为null比所有的其他值都小。

public static <T, U> Comparator<T> comparing(Function<? super T, ? extends U> keyExtractor,Comparator<? super U> keyComparator)

先处理,后调用传入的方法进行比较

public static <T, U extends Comparable<? super U>> Comparator<T> comparing(Function<? super T, ? extends U> keyExtractor)

先处理,然后调用待比较对象的compareTo()比较

public static <T> Comparator<T> comparingInt(ToIntFunction<? super T> keyExtractor)

思路:

  1. 对传入的对象使用keyExtractor()处理,获得int结果
  2. 使用Integer.compare()进行比较

public static <T> Comparator<T> comparingLong(ToLongFunction<? super T> keyExtractor)

Long

public static<T> Comparator<T> comparingDouble(ToDoubleFunction<? super T> keyExtractor)

Double

上一篇 下一篇

猜你喜欢

热点阅读