Java 8とLambdaを使ってストリームをソートする方法

Java 8では、無名コンパレータを作成せずに、ラムダ式を使用してStreamクラスの要素をソートすることができます。

構文:

stream.sorted( (a, b) -> a.compareTo( b ) )

この例ではまず、テストオブジェクトのストリームを作成します。 各Testオブジェクトには、nameというString変数があります。 これはソートに使用される変数です。
次に、ストリームはソートされたメソッドを使用してオブジェクト名に従ってソートされます。 最後に、ストリームのすべての要素がforEachメソッドを使用して出力に書き込まれます。 コールはストリーム上でシーケンシャルに実行されます。 コードはストリームの要素をフィルタリングするために特に書かれていないので、理解しやすい。

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

import java.util.stream.Stream;

public class LambdaSortStream {

    public static void main(String[] argv){
		
        Stream<Test> stream = Stream.of( new Test("a"), new Test("c"), new Test("a"), new Test("b"), new Test("b"));
		
        System.out.println( "Sorted Stream: " );
        stream.sorted( (a, b) -> a.name.compareTo( b.name ) )
            .forEach( a -> {
                System.out.println( a.name );
            } );
			
	}
}

class Test {
    Test(String n){
        name = n;
    }
	
    String name;
}

出力は次のようになります。

Sorted Stream: 
a
a
b
b
c

ラムダ式は非常に汎用的なので、同じロジックを使用してJavaメソッドを作成する場合と比べてパフォーマンスに影響します。 ラムダ式を使用すると、より小さく簡単なコードを書くことができます。 長期的に理解して維持することは容易になります。

参考文献:

Lambda Expressions

最近のコメント