モジュールのレッスン (1/2)
ラムダ式
Java 8 以降、Lambda Expressions を介して関数型プログラミングがサポートされます。ラムダ式は本質的に匿名メソッド (名前のない関数) であり、引数としてメソッドに渡したり、変数に格納したりできます。
機能インターフェイス
ラムダ式は、関数インターフェイスが必要な場合にのみ使用できます。関数型インターフェイスは、1 つの抽象メソッド を宣言するインターフェイスです。 Java は、これらのインターフェースにオプションの @FunctionalInterface アノテーションを付けます。
ユーザー定義の関数インターフェイスの例:
@FunctionalInterface
interface MathOperation {
int operate(int a, int b);
}Java 8 より前では、匿名の内部クラスを定義する必要がありました。ラムダを使用すると、構文は次のように簡略化されます。
MathOperation addition = (a, b) -> a + b;
int result = addition.operate(5, 3); // Returns 8ラムダ式の構造
ラムダの基本的な構文は次のとおりです。
(parameters) -> { body }
- パラメータなし:
() -> System.out.println("Hello") - 単一パラメータ:
x -> x * 2(括弧は省略可能) - 複数のパラメータ:
(x, y) -> x + y - 複数行の本文: 本文に複数のステートメントが含まれる場合、中かっこ
{}と明示的なreturnステートメントが必要です。
MathOperation detailedAddition = (a, b) -> {
System.out.println("Adding...");
return a + b;
};Java の標準関数インターフェイス
java.util.function パッケージは、いくつかの組み込み関数インターフェイスを提供します。
Predicate<T>:T型の引数を受け入れ、ブール値を返します (test(T t)メソッド)。Consumer<T>:T型の引数を受け入れ、結果を返さずに操作を実行します (accept(T t)メソッド)。Function<T, R>: 引数Tを受け取り、結果R(apply(T t)メソッド) を返します。Supplier<T>: 引数を受け入れず、T型の値を返します (get()メソッド)。
自分で試してみてください
2 つの整数を加算するラムダ式を使用して Calculator インターフェイスをインスタンス化して、コードを完成させます。次に、5 と 3 を渡して計算メソッドを呼び出し、結果を出力します。
ヒントを表示
「Calculator adder = (a, b) -> a + b;」を宣言し、print 呼び出し内で「adder.calculate(5, 3)」を呼び出します。
3 回の試行後に解決策が利用可能になります
文字列の長さが 5 文字を超えているかどうかを確認するラムダ式を使用して、isLong という名前の標準関数インターフェイス Predicate<String> のインスタンスを作成します。次に、「hello world」のテスト結果を出力します。
ヒントを表示
`Predicate<String>` のラムダはパラメータ `s` を受け取り、ブール条件として `s.length() > 5` を返します。
3 回の試行後に解決策が利用可能になります
文字列名のリストをアルファベット順に並べ替えるには、そのリストに対して sort() メソッドを呼び出し、Comparator を実装するラムダ式を渡します (2 つの文字列 s1、s2 を取得し、compareTo を使用して比較します)。
ヒントを表示
`names.sort((s1, s2) -> s1.compareTo(s2));` を使用して、リストをその場で並べ替えます。
3 回の試行後に解決策が利用可能になります