Java ラムダ式
ラムダ式は Java 8 で追加されました。
ラムダ式は、パラメーターを受け取って値を返す短いコード ブロックです。ラムダ式はメソッドに似ていますが、名前は必要なく、メソッドの本体に直接実装できます。
構文
最も単純なラムダ式には、1つのパラメーターと式が含まれます。
複数のパラメーターを使用するには、それらを括弧で囲みます。
:::example {.techis-example}
:::code {.techis-code .notranslate .techis-white}
(parameter1, parameter2) -> expression
:::code
:::example
式には制限があります。すぐに値を返す必要があり、変数や代入、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<>();
numbers.add(5);
numbers.add(9);
numbers.add(8);
numbers.add(1);
numbers.forEach( (n) -> { System.out.println(n); } );
}
}
自分で試してみる»
ラムダ式は、変数の型が1つのメソッドしか持たないインターフェースである場合、変数に格納できます。ラムダ式には、そのメソッドと同じ数のパラメータと同じ戻り値の型が必要です。 Javaには、リストで使われるConsumerインターフェイス (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<>();
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);
}
}
自分で試してみる»