ラムダを使ってJava 8でリストをソートする方法

Java 8では、匿名コンパレータを使用する代わりに、リストをラムダ式でソートすることができます。

構文:

list.sort( (a, b) -> a.compareTo( b ) );

この例では、乱数のリストを作成します。 そのリストは注文を表示するために出力に表示されます。 次に、リストはソートされ、インスタンスオブジェクトのソートメソッドが呼び出されます。 コンパレータをパラメータとして渡しています。 そのリストは出力に書き込まれ、リストの値が正しくソートされていることが示されます。

次のJavaファイルを作成します。

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

参考文献:

Lambda Expressions

最近のコメント