Ordering是guava的一个排序类
有很多排序方法 个人觉得非空值排序和寻找最值真的是太方便了!
//类的声明
@GwtCompatible
public abstract class Ordering<T>
extends Object
implements Comparator<T>
几个好用的方法:
//搜索排序列表使用键的二进制搜索算法。
int binarySearch(List<? extends T> sortedList, T key)
//是否升序
boolean isOrdered(Iterable<? extends T> iterable)
//最值
<E extends T> E max(E a, E b)
<E extends T> E max(E a, E b, E c, E... rest)
<E extends T> E max(Iterable<E> iterable)
<E extends T> E max(Iterator<E> iterator)
<E extends T> E min(E a, E b)
<E extends T> E min(E a, E b, E c, E... rest)
<E extends T> E min(Iterable<E> iterable)
<E extends T> E min(Iterator<E> iterator)
//返回实例
static <C extends Comparable> Ordering<C> natural()
//返回对待null小于所有其他值,并使用此来比较非空值排序。
<S extends T> Ordering<S> nullsFirst()
//返回对待null作为大于所有其他值,并使用这个顺序来比较非空值排序<S extends T> Ordering<S> nullsLast()
//返回相反顺序; 顺序相当于Collections.reverseOrder(Comparator)。
<S extends T> Ordering<S> reverse()
//测试
package guavaDome;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import com.google.common.collect.Ordering;
public class GuavaDome {
public static void main(String args[]){
List<Integer> numbers = new ArrayList<Integer>();
numbers.add(new Integer(5));
numbers.add(new Integer(2));
numbers.add(new Integer(15));
numbers.add(new Integer(51));
numbers.add(new Integer(53));
numbers.add(new Integer(35));
numbers.add(new Integer(45));
numbers.add(new Integer(32));
numbers.add(new Integer(43));
numbers.add(new Integer(16));
Ordering ordering = Ordering.natural();
System.out.println("Input List: ");
System.out.println(numbers);
System.out.println("++++++++++");
ordering= Ordering.allEqual();
System.out.println("++++++++++");
Collections.sort(numbers);
System.out.println(numbers);
Collections.sort(numbers,ordering );
System.out.println("Sorted List: ");
System.out.println(numbers);
System.out.println("======================");
//是否升序
System.out.println("List is sorted: " + ordering.isOrdered(numbers));
System.out.println("explicit "+ numbers);
//寻找 一个集合中的最值
System.out.println("Minimum: " + ordering.min(numbers));
System.out.println("Maximum: " + ordering.max(numbers));
//颠倒
Collections.sort(numbers,ordering.reverse());
System.out.println("Reverse: " + numbers);
System.out.println("List is sorted: " + ordering.isOrdered(numbers));
numbers.add(null);
System.out.println("Null added to Sorted List: ");
System.out.println(numbers);
Collections.sort(numbers,ordering.nullsFirst());
System.out.println("Null first Sorted List: ");
System.out.println(numbers);
System.out.println("======================");
List<String> names = new ArrayList<String>();
names.add("Ram");
names.add("Shyam");
names.add("Mohan");
names.add("Sohan");
names.add("Ramesh");
names.add("Suresh");
names.add("Naresh");
names.add("Mahesh");
names.add(null);
names.add("Vikas");
names.add("Deepak");
System.out.println("Another List: ");
System.out.println(names);
//返回非空值的
Collections.sort(names,ordering.nullsFirst().reverse());
System.out.println("Null first then reverse sorted list: ");
System.out.println(names);
}
}
测试结果
Input List:
[5, 2, 15, 51, 53, 35, 45, 32, 43, 16]
++++++++++
++++++++++
[2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
Sorted List:
[2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
======================
List is sorted: true
explicit [2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
Minimum: 2
Maximum: 2
Reverse: [2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
List is sorted: true
Null added to Sorted List:
[2, 5, 15, 16, 32, 35, 43, 45, 51, 53, null]
Null first Sorted List:
[null, 2, 5, 15, 16, 32, 35, 43, 45, 51, 53]
======================
Another List:
[Ram, Shyam, Mohan, Sohan, Ramesh, Suresh, Naresh, Mahesh, null, Vikas, Deepak]
Null first then reverse sorted list:
[Ram, Shyam, Mohan, Sohan, Ramesh, Suresh, Naresh, Mahesh, Vikas, Deepak, null]