Comparator源码阅读

Comparator源码阅读

源码注释

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

@FunctionalInterface
public interface Comparator 

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 reversed() {
        return Collections.reverseOrder(this);
    }

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


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

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

你可能感兴趣的:(Comparator源码阅读)