1. 程式人生 > >Guava Ordering排序類使用

Guava Ordering排序類使用

1、功能介紹

Ordering是Google開發的Comparator實現類,它可以構建比較複雜的比較器,用來實現集合的排序功能。

2、使用示例

//首先建立user物件,放在list中。

User user = new User();

User u1 = new User(1,"daqiao",19);

User u2 = new User(2,"xiaoqiao",18);

User u3 = new User(3,"diaochan",20);

List<User> users = Lists.newArrayList(u1,u2,u3);

//user類實現了Comparator介面,可以使用Ordering.from獲取比較器。

Ordering ordering = Ordering.from(user);

//呼叫Collections的sort函式完成排序。

Collections.sort(users,ordering);

3、常用方法

1)、獲取例項物件

獲取例項物件基本有四種方式

  1. natural() 獲取自然排序的ordering物件;
  2. usingToString() 獲取“按物件的字串形式做字典排序”的ordering物件;
  3. from(Comparator) 把給定的Comparator(實現類)轉化為排序器;
  4. 直接new Ordering:

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

2)、鏈式呼叫方法

鏈式方式可以對例項進行一系列的運算,簡化程式碼量,提高效率。

  1. reverse() 獲取語義相反的排序器
  2. nullsFirst() 使用當前排序器,但額外把null值排到最前面。
  3. nullsLast() 使用當前排序器,但額外把null值排到最後面。
  4. compound(Comparator) 合成另一個比較器,以處理當前排序器中的相等情況。
  5. lexicographical() 基於處理型別T的排序器,返回該型別的可迭代物件Iterable<T>的排序器。
  6. onResultOf(Function) 對集合中元素呼叫Function,再按返回值用當前排序器排序。

當閱讀鏈式呼叫產生的排序器時,應該從後往前讀。當用到compound方法包裝排序器時,

就不應遵循從後往前讀的原則。為了避免理解上的混亂,應該在鏈中最先或最後呼叫compound。

3)、排序方法

以下方法可以得到一個排序後的集合。

  • greatestOf(Iterable iterable, int k) 獲取可迭代物件中最大的k個元素。 
  • isOrdered(Iterable) 判斷可迭代物件是否已按排序器排序:允許有排序值相等的元素。 
  • sortedCopy(Iterable) 判斷可迭代物件是否已嚴格按排序器排序:不允許排序值相等的元素。
  • min(E, E) 返回兩個引數中最小的那個。如果相等,則返回第一個引數。
  • min(E, E, E, E...) 返回多個引數中最小的那個。如果有超過一個引數都最小,則返回第一個最小的引數。
  • min(Iterable) 返回迭代器中最小的元素。如果可迭代物件中沒有元素,則丟擲NoSuchElementException。