Ordering は、Guava クラス ライブラリによって提供されるシャープで強力な比較ツールです。Guava の Ordering は、JDK Comparator よりも強力です。拡張が非常に簡単で、複雑なコンパレータを簡単に構築して、コンテナの比較、並べ替え、その他の操作に使用できます。
本質的に、Ordering インスタンスは特別な Comparator インスタンスにすぎません。順序付けは、コンパレーターに依存するメソッド (Collections.max など) を単純に取得し、それをインスタンス メソッドとして使用できるようにします。さらに、Ordering はメソッド呼び出しのチェーン化と既存のコンパレーターの機能強化を提供します。
それでは、Orderingにおける具体的な方法と簡単な使用例を見ていきましょう。
一般的な静的メソッド:
natural(): Comparable 型の自然な順序を使用します。例: 整数は小さいものから大きいものへ、文字列は辞書順です。
usingToString(): toString() によって返された文字列を使用します。 in Dictionary order 順序でソート;
arbitrary(): すべてのオブジェクトの任意の順序を返します。つまり、compare(a, b) == 0 は a == b (同一性の等価性) です。 順序自体には意味はありませんが、VM の存続期間中は一定です。
[code]import java.util.List; import org.junit.Test; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; public class OrderingTest { @Test public void testStaticOrdering(){ List<String> list = Lists.newArrayList(); list.add("peida"); list.add("jerry"); list.add("harry"); list.add("eva"); list.add("jhon"); list.add("neron"); System.out.println("list:"+ list); Ordering<String> naturalOrdering = Ordering.natural(); Ordering<Object> usingToStringOrdering = Ordering.usingToString(); Ordering<Object> arbitraryOrdering = Ordering.arbitrary(); System.out.println("naturalOrdering:"+ naturalOrdering.sortedCopy(list)); System.out.println("usingToStringOrdering:"+ usingToStringOrdering.sortedCopy(list)); System.out.println("arbitraryOrdering:"+ arbitraryOrdering.sortedCopy(list)); } }
[code]list:[peida, jerry, harry, eva, jhon, neron] naturalOrdering:[eva, harry, jerry, jhon, neron, peida] usingToStringOrdering:[eva, harry, jerry, jhon, neron, peida] arbitraryOrdering:[neron, harry, eva, jerry, peida, jhon]
reverse(): 現在の Ordering の逆の順序を返します。
nullsFirst(): null 以外の要素の前に null を配置する Ordering を返し、残りは元の Ordering と同じです。
nullsLast() : null 以外の要素の後に null を配置する Ordering を返し、残りは元の Ordering と同じです
Compound(Comparator): Comparator を 2 番目の並べ替え要素として使用して、並べ替えなどの Ordering を返します。バグリスト、最初にバグのレベルに従って並べ替え、次に優先度に従って並べ替えます。
lexicographical(): 辞書要素によって反復された順序を返します。
onResultOf(Function): 関数を各要素に適用した後、ソートのための元の順序;
greatestOf(Iterable iterable, int k): 指定された k 番目の反復可能要素の最大の要素を最大から最小の順序で返します。不安定です。
leastOf(Iterable iterable,int k): 指定された k 番目の反復可能要素の最小の要素を最小から最大の順に返します。不安定です。
isOrdered(Iterable): 順序付けされているかどうかに関係なく、Iterable を 2 要素未満にすることはできません。
isStrictlyOrdered(Iterable): 厳密に順序付けされているかどうか。 Iterable には 2 つ未満の要素を含めることはできないことに注意してください。
sortedCopy(Iterable): 指定された要素をリストのソートされたコピーとして返します。
[code]import java.util.List; import org.junit.Test; import com.google.common.collect.ImmutableList; import com.google.common.collect.Lists; import com.google.common.collect.Ordering; public class OrderingTest { @Test public void testOrdering(){ List<String> list = Lists.newArrayList(); list.add("peida"); list.add("jerry"); list.add("harry"); list.add("eva"); list.add("jhon"); list.add("neron"); System.out.println("list:"+ list); Ordering<String> naturalOrdering = Ordering.natural(); System.out.println("naturalOrdering:"+ naturalOrdering.sortedCopy(list)); List<Integer> listReduce= Lists.newArrayList(); for(int i=9;i>0;i--){ listReduce.add(i); } List<Integer> listtest= Lists.newArrayList(); listtest.add(1); listtest.add(1); listtest.add(1); listtest.add(2); Ordering<Integer> naturalIntReduceOrdering = Ordering.natural(); System.out.println("listtest:"+ listtest); System.out.println(naturalIntReduceOrdering.isOrdered(listtest)); System.out.println(naturalIntReduceOrdering.isStrictlyOrdered(listtest)); System.out.println("naturalIntReduceOrdering:"+ naturalIntReduceOrdering.sortedCopy(listReduce)); System.out.println("listReduce:"+ listReduce); System.out.println(naturalIntReduceOrdering.isOrdered(naturalIntReduceOrdering.sortedCopy(listReduce))); System.out.println(naturalIntReduceOrdering.isStrictlyOrdered(naturalIntReduceOrdering.sortedCopy(listReduce))); Ordering<String> natural = Ordering.natural(); List<String> abc = ImmutableList.of("a", "b", "c"); System.out.println(natural.isOrdered(abc)); System.out.println(natural.isStrictlyOrdered(abc)); System.out.println("isOrdered reverse :"+ natural.reverse().isOrdered(abc)); List<String> cba = ImmutableList.of("c", "b", "a"); System.out.println(natural.isOrdered(cba)); System.out.println(natural.isStrictlyOrdered(cba)); System.out.println(cba = natural.sortedCopy(cba)); System.out.println("max:"+natural.max(cba)); System.out.println("min:"+natural.min(cba)); System.out.println("leastOf:"+natural.leastOf(cba, 2)); System.out.println("naturalOrdering:"+ naturalOrdering.sortedCopy(list)); System.out.println("leastOf list:"+naturalOrdering.leastOf(list, 3)); System.out.println("greatestOf:"+naturalOrdering.greatestOf(list, 3)); System.out.println("reverse list :"+ naturalOrdering.reverse().sortedCopy(list)); System.out.println("isOrdered list :"+ naturalOrdering.isOrdered(list)); System.out.println("isOrdered list :"+ naturalOrdering.reverse().isOrdered(list)); list.add(null); System.out.println(" add null list:"+list); System.out.println("nullsFirst list :"+ naturalOrdering.nullsFirst().sortedCopy(list)); System.out.println("nullsLast list :"+ naturalOrdering.nullsLast().sortedCopy(list)); } } //============输出============== list:[peida, jerry, harry, eva, jhon, neron] naturalOrdering:[eva, harry, jerry, jhon, neron, peida] listtest:[1, 1, 1, 2] true false naturalIntReduceOrdering:[1, 2, 3, 4, 5, 6, 7, 8, 9] listReduce:[9, 8, 7, 6, 5, 4, 3, 2, 1] true true true true isOrdered reverse :false false false [a, b, c] max:c min:a leastOf:[a, b] naturalOrdering:[eva, harry, jerry, jhon, neron, peida] leastOf list:[eva, harry, jerry] greatestOf:[peida, neron, jhon] reverse list :[peida, neron, jhon, jerry, harry, eva] isOrdered list :false isOrdered list :false add null list:[peida, jerry, harry, eva, jhon, neron, null] nullsFirst list :[null, eva, harry, jerry, jhon, neron, peida] nullsLast list :[eva, harry, jerry, jhon, neron, peida, null]
上記は Java-Class Library-Guava-Ordering Comparator の内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (m.sbmmt.com) をご覧ください。