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のようなリスト実装で使用できます。