Javaラムダ式
Javaラムダ式
ラムダ式はJava8で追加されました。
ラムダ式は、パラメーターを取り込んで値を返す短いコードブロックです。ラムダ式はメソッドに似ていますが、名前は必要なく、メソッドの本体に直接実装できます。
構文
最も単純なラムダ式には、単一のパラメーターと式が含まれています。
parameter -> expression
複数のパラメーターを使用するには、それらを括弧で囲みます。
(parameter1, parameter2) -> expression
式は限られています。すぐに値を返す必要があり、変数、割り当て、またはなどのステートメントを含めることはできませif
んfor
。より複雑な操作を行うために、中括弧を使用してコードブロックを使用できます。ラムダ式が値を返す必要がある場合は、コードブロックにreturn
ステートメントが必要です。
(parameter1, parameter2) -> { code block }
ラムダ式の使用
ラムダ式は通常、パラメーターとして関数に渡されます。
例
ArrayList
のメソッドでランバ式を使用してforEach()
、リスト内のすべての項目を出力します。
import java.util.ArrayList;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
numbers.forEach( (n) -> { System.out.println(n); } );
}
}
変数の型がメソッドが1つしかないインターフェースである場合、ラムダ式を変数に格納できます。ラムダ式は、そのメソッドと同じ数のパラメーターと同じリターンタイプを持つ必要があります。Consumer
Javaには、リストで使用されるインターフェース(java.util
パッケージに含まれている)など、これらの種類のインターフェースの多くが組み込まれています。
例
JavaのConsumer
インターフェースを使用して、ラムダ式を変数に格納します。
import java.util.ArrayList;
import java.util.function.Consumer;
public class Main {
public static void main(String[] args) {
ArrayList<Integer> numbers = new ArrayList<Integer>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
Consumer<Integer> method = (n) -> { System.out.println(n); };
numbers.forEach( method );
}
}
メソッドでラムダ式を使用するには、メソッドの型として単一メソッドインターフェイスを持つパラメーターが必要です。インターフェイスのメソッドを呼び出すと、ラムダ式が実行されます。
例
ラムダ式をパラメーターとして受け取るメソッドを作成します。
interface StringFunction { String run(String str);
}public class Main { public static void main(String[] args) { StringFunction exclaim = (s) -> s + "!"; StringFunction ask = (s) -> s + "?"; printFormatted("Hello", exclaim); printFormatted("Hello", ask);
}public static void printFormatted(String str, StringFunction format) { String result = format.run(str); System.out.println(result);
}}