美文网首页
15-Comparator

15-Comparator

作者: 鹏程1995 | 来源:发表于2020-02-03 14:30 被阅读0次

类介绍

  • 这个类是对集合类中的元素进行排序的接口,这个接口的实现类可以传递给Collections.sort(),Arrays.sort()之类的方法,然后对集合中的元素进行排序。
  • A.equals(B)\LeftrightarrowB.equals(A)\LeftrightarrowC.compare(A,B)==0,在定义Comparator的类时一定要遵守这个规范
  • 如果是为了给可以序列化的类进行排序,那么实现Comparator类时最好也实现了Serialable方法
  • 实现了Comparator的类可以选择性的支持对null的比较,而实现Comparable的类不能

类代码解析

int compare(T o1, T o2);

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

  • result > 0\Leftrightarrowo1 > 02
  • result < 0\Leftrightarrowo1 < o2
  • result = 0\Leftrightarrowo1 = o2

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

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);
        };
  • 返回一个实现了Comparator<T>Serializable两个接口的类
  • 返回的比较器的比较思路是:先调用本比较器进行比较,如果比较结果是相等就调用传入的比较器进行进一步比较

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

相关文章

  • 15-Comparator

    类介绍 这个类是对集合类中的元素进行排序的接口,这个接口的实现类可以传递给Collections.sort(),A...

网友评论

      本文标题:15-Comparator

      本文链接:https://www.haomeiwen.com/subject/wluhxhtx.html