💨
【Java】ラムダ式
ラムダ式とは?
- ラムダ式は、1回だけ使用する処理を短く書くための手段
- 匿名クラスの代わりとして使える
- Stream APIなどでも利用される
まずは普通のメソッドを復習
たとえば、数を2倍にするメソッドを作る場合、従来の方法では以下のように記述すると思います。
しかし、この twice メソッドをたった1度しか使わないなら、毎回メソッドを書くのは面倒ですよね。
package lambdaTest;
public class Main {
public static int twice(int x) {
return x * 2;
}
public static void main(String[] args) {
System.out.println(twice(5)); // 10
}
}
匿名クラスで短縮
Javaでは、メソッドの代わりに匿名クラスや関数型インターフェース使用することもできます。たとえば、Functionを使用して上記と同じ処理を書いてみます。
この方法でも記述することは出来ますがコードが長いですね。
これをラムダ式でもっと短くしましょう!
package lambdaTest;
import java.util.function.Function;
public class MainFunction {
public static void main(String[] args) {
Function<Integer, Integer> twice = new Function<Integer, Integer>() {
@Override
public Integer apply(Integer x) {
return x * 2;
}
};
System.out.println(twice.apply(5)); // 10
}
}
ラムダ式でスッキリ記述する
x -> x * 2の部分がラムダ式です。
x:引数、x * 2:処理内容
わざわざメソッドを定義しなくても、1回限りの処理をサクッと記述することが出来ますね!
package lambdaTest;
import java.util.function.Function;
public class MainLambda {
public static void main(String[] args) {
Function<Integer, Integer> twice = x -> x * 2;
System.out.println(twice.apply(5)); // 10
}
}
ラムダ式の基本構文
(引数リスト) -> { 処理の内容 }
- 引数リスト:メソッドの引数にあたる部分で、()内に記述します。
- 処理の内容:処理内容を記述します。
引数なし
() -> System.out.println("Hello, Lambda!");
引数あり
intなどのデータ型は不要
(x) -> x * 2;
引数が1つ
()は省略可
x -> x * 2;
引数が2つ
(x, y) -> x + y;
return
- 処理が1行で、結果をそのまま返す場合はreturnを書かなくてもOK
Function<Integer, Integer> square = x -> x * x;
- returnを使う場合は {}を付ける必要がある
Function<Integer, Integer> square = x -> {
return x * x;
};
- 処理が複数行になる場合は{}をつけ、returnを記述する
Function<Integer, Integer> square = x -> {
System.out.println("計算中...");
return x * x;
};
その他の例
リストの各要素を処理
package methodReferenceTest;
import java.util.Arrays;
import java.util.List;
public class MainListTest {
public static void main(String[] args) {
List<String> names = Arrays.asList("高橋田", "大川山", "杉原野");
//IterableインターフェースのforEach メソッド
names.forEach(System.out::println);
}
}
<出力例>
Udemyで講座を公開中!
X(旧Twitter)
Zenn 本
Youtube
Discussion