Comparator源码阅读

Comparator源码阅读

源码注释

一个比较函数,可以传递给排序方法,也可以用于分组,相比于Comparable需要类自身实现比较函数,有需求时,Comparator可以动态的自定义比较策略,可以支持不同的类之间进行比较,较灵活。

@FunctionalInterface
public interface Comparator<T> 

FunctionalInterface,该注解只能标记在仅有一个抽象方法的接口上,非必须,加上的好处:让编译器检查,增加可读性。

说明:static,default修饰的方法不算抽象方法,只要没有覆盖Object中的方法也不算抽象方法。


抽象方法

compare
int compare(T o1, T o2);

只能返回正数,0和负数,对应o1小于,等于或大于o2


其他方法

equals
 boolean equals(Object obj);

该方法是Object中的方法, 若比较的实例对象需要比较相等时,则应该在compare中调用equals方法,实例对象的equals重写与否看实例对象的实际情况,最好一致对应,不对应可以不在compare中调用,自己制定


reversed
    default Comparator<T> reversed() {
        return Collections.reverseOrder(this);
    }

返回一个比较规则相反的Comparator


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

配合java8 lambda表达式使用,暂时放一下//TODO

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容