Comparable与Comparator

java.lang.Comparable

        该接口定义了唯一的方法:

public int compareTo(T o);

        比较接口,实现了该接口的类的所有对象就能够被比较,就具备了自然排序能力(nature ordering)。支持排序的容器的基础排序就是调用compareTo方法的,如TreeMap。实现了Comparable接口的类,可以用Collections.sort(List<T> list) ,Arrays.sort(Object[] a) 来排序。

        compareTo方法的入参不能为null,否则运行时会报NullPointerException. 因为该方法会调用入参的属性值进行比较。

java.util.Comparator

@FunctionalInterface
public interface Comparator<T> {
    default Comparator<T> reversed(){...}
    default Comparator<T> thenComparing(Comparator<? super T> other) {...}
    default <U> Comparator<T> thenComparing(
            Function<? super T, ? extends U> keyExtractor,
            Comparator<? super U> keyComparator){...}
    default <U extends Comparable<? super U>> Comparator<T> thenComparing(
            Function<? super T, ? extends U> keyExtractor){...}
    default Comparator<T> thenComparingInt(ToIntFunction<? super T> keyExtractor) {...}
    default Comparator<T> thenComparingLong(ToLongFunction<? super T> keyExtractor) {...}
    default Comparator<T> thenComparingDouble(ToDoubleFunction<? super T> keyExtractor)     
    {...}
    ...
}

        比较器接口,可以基于该接口定义需要的比较器。该类是一个函数式接口,接口里有一些常用的比较方法的默认实现,可以直接调用,比Comparable更灵活,能够构造复杂的比较逻辑,可以认为是对Comparable的增强。

// 定义两个比较器,进行两个维度的比较
list.sort(
  Comparator.comparingInt(Student::textbookScore)
  .thenComparingInt(Student::physicalScore)
);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值