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
网友评论