Guava学习之Ordering

示例

assertTrue(byLengthOrdering.reverse().isOrdered(list));

**概述** Ordering 是Guava的”流畅版” Comparator , 一个强大的比较器工具。它用来构建高级comparator,并把comparator应用于各种集合(collection)。
本质上讲, Ordering 实例不过是一个特殊的 Comparator 实例。 Ordering 所做的就是把那些依赖于 Comparator 的方法(例如, Collections.max) 改写为成员方法。另外, Ordering 类提供一些可链式调用的方法,用来调整和增强已有的comparator.
**创建**Ordering Ordering对象一般由以下静态方法创建:
**方法 描述(静态**) natural() 在Comparable类型上应用自然排序(natural ordering)。
usingToString() 将对象的toString()返回值按字典序排序。
想要将已有的 Comparator 转化为 Ordering ,只需使用 Ordering.from(Comparator) .
但是创建 Ordering 更常规的做法是完全忽略 Comparator ,直接扩展 Ordering 抽象类:

Ordering<String> byLengthOrdering = new Ordering<String>(){
         public int compare(String left,String right){
         return Ints.compare(left.length(), right.length());
       }
     };

**链式调用** 可以通过包装 Ordering 来进行一些预处理。一些最常见的处理如下:
**方法 描述** reverse() 返回逆序的Ordering.
nullsFirst() 返回的 Ordering 将null元素排在非null元素前面,其余部分的排序规则与原始的 Ordering 相同。nullsLast()同理。
compound(Comparator) 返回的 Ordering 对之前每组相等的元素用指定的 Comparator 再排序。
lexicographical() 返回的 Ordering 对iterable的元素按字典序排序。
onResultOf(Function) 返回的 Ordering 将被排序的元素传入function,对返回值用原始的 Ordering排序。
举例来说,假设你希望创建下面这个类的 comparator …

classFoo{
     @NullableString sortedBy;
     int notSortedBy;
     }


 …并且希望它能在 sortedBy 基础上处理null值。下面是应用链式调用的解决方案: