Guava学习——Ordering类

来源:互联网 发布:淘宝水印在线制作 编辑:程序博客网 时间:2024/06/06 18:22

Ordering是guava的一个排序类
有很多排序方法 个人觉得非空值排序和寻找最值真的是太方便了!

//类的声明@GwtCompatiblepublic 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: trueexplicit [2, 5, 15, 16, 32, 35, 43, 45, 51, 53]Minimum: 2Maximum: 2Reverse: [2, 5, 15, 16, 32, 35, 43, 45, 51, 53]List is sorted: trueNull 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]