Java 8では、無名コンパレータを作成せずに、ラムダ式を使用してStreamクラスの要素をソートすることができます。
stream.sorted( (a, b) -> a.compareTo( b ) )
この例ではまず、テストオブジェクトのストリームを作成します。 各Testオブジェクトには、nameというString変数があります。 これはソートに使用される変数です。
次に、ストリームはソートされたメソッドを使用してオブジェクト名に従ってソートされます。 最後に、ストリームのすべての要素がforEachメソッドを使用して出力に書き込まれます。 コールはストリーム上でシーケンシャルに実行されます。 コードはストリームの要素をフィルタリングするために特に書かれていないので、理解しやすい。
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メソッドを作成する場合と比べてパフォーマンスに影響します。 ラムダ式を使用すると、より小さく簡単なコードを書くことができます。 長期的に理解して維持することは容易になります。