Java 8では、匿名コンパレータを使用する代わりに、リストをラムダ式でソートすることができます。
list.sort( (a, b) -> a.compareTo( b ) );
この例では、乱数のリストを作成します。 そのリストは注文を表示するために出力に表示されます。 次に、リストはソートされ、インスタンスオブジェクトのソートメソッドが呼び出されます。 コンパレータをパラメータとして渡しています。 そのリストは出力に書き込まれ、リストの値が正しくソートされていることが示されます。
import java.util.Arrays; import java.util.List; public class LambdaListSort { public static void main(String[] argv){ // Create an unsorted List List<Integer> list = Arrays.asList( 1, 4, 2, 3, 0 ); System.out.println( "Unsorted List:" + list); // Sort the list list.sort( (a, b) -> a.compareTo( b ) ); System.out.println( "Sorted List:" + list); } }
Unsorted List:[1, 4, 2, 3, 0] Sorted List:[0, 1, 2, 3, 4]
前述の例でsortメソッドを呼び出すのと同じ方法で、Comparableインターフェイスを実装するObjectを使ってCollectionsソートメソッドを呼び出すことができます。 リストのすべての要素はComparableを実装しなければならず、昇順にソートされます。
import java.util.Arrays; import java.util.Collections; import java.util.List; public class LambdaListSort2 { public static void main(String[] argv){ // Create an unsorted List List<Integer> list = Arrays.asList( 1, 4, 2, 3, 0 ); System.out.println( "Unsorted List:" + list); // Sort the list Collections.sort( list, (a, b) -> a.compareTo( b ) ); System.out.println( "Sorted List:" + list); } }
Unsorted List:[1, 4, 2, 3, 0] Sorted List:[0, 1, 2, 3, 4]
このコードは非常に簡単で、無名コンパレータを作成する時間を節約できます。 sortメソッドは、ArrayListやLinkedListのようなリスト実装で使用できます。