Comparator定义了一个静态方法,reversed,故我们不需要重新再定义一个比较器,我们可以这样就能实现逆序排序:
List< Apple> apples = new ArrayList<>();
apples.sort( Comparator.comparing(Apple::getWeight()).reversed() );
1.2 比较器链
如果要支持多重排序呢?例如先根据苹果的重量,如果重量相同就按照颜色排序,那如何来实现呢?
apples.sort( Comparator.comparing(Apple::getWeight()).thenComparing( Apple::getColor() ) );
之所以可以使用上述表达式,是因为Comparator定义了如下方法:
default <U extends Comparable<? super U>> Comparator thenComparing( Function<? super T, ? extends U> keyExtractor)
{
return thenComparing(comparing(keyExtractor));
}
温馨提示:Comparator中定义很多thenComparing重载方法,在具体使用过程中,可以先看看其函数声明。
2、谓词复合
提到谓词复合,我们就不得不提Predicate< T >函数式编程接口,其类图如下所示: