犀利的比较器(Ordering)

优质
小牛编辑
129浏览
2023-12-01

Ordering是Guava类库提供的一个犀利强大的比较器工具,Guava的Ordering和JDK Comparator相比功能更强。它非常容易扩展,可以轻松构造复杂的comparator,然后用在容器的比较、排序等操作中。

常用静态方法


Ordering.natural();                  // 使用Comparable类型的自然顺序, 例如:整数从小到大,字符串是按字典顺序;  
Ordering.usingToString();            // 使用toString()返回的字符串按字典顺序进行排序;
Ordering.from(Comparator);           // 将Comparator转换为Ordering
new Ordering<T>(){                   // 或者直接构建一个Ordering对象,并实现compare方法
	public int compare(T left, T right){}
}

实例方法(支持链式)

com.google.common.collect.Ordering

reverse();                            //返回与当前Ordering相反的排序   
nullsFirst();                         //返回一个将null放在non-null元素之前的Ordering,其他的和原始的Ordering一样  
nullsLast();                          //返回一个将null放在non-null元素之后的Ordering,其他的和原始的Ordering一样  
compound(Comparator);                 //返回一个使用Comparator的Ordering,Comparator作为第二排序元素  
lexicographical();                    //返回一个按照字典元素迭代的Ordering  
onResultOf(Function);                 //将function应用在各个元素上之后, 在使用原始ordering进行排序  
greatestOf(Iterable iterable, int k); //返回指定的前k个可迭代的最大的元素,按照当前Ordering从最大到最小的顺序  
leastOf(Iterable iterable, int k);    //返回指定的前k个可迭代的最小的元素,按照当前Ordering从最小到最大的顺序  
isOrdered(Iterable);                  //是否有序(前面的元素可以大于或等于后面的元素),Iterable不能少于2个元素
isStrictlyOrdered(Iterable);          //是否严格有序(前面的元素必须大于后面的元素),Iterable不能少于两个元素  
sortedCopy(Iterable);                 //返回指定的元素作为一个列表的排序副本