< Java基本文法
- ラムダ式とは、メソッドを定義することなくロジックを利用するための仕組み
- すでに定義されたメソッドがある場合は機能オブジェクトとして再利用する
- そのロジックを格納するには同じ戻り値と引数を定義したSAMインターフェースを使う
import java.util.function.*; public class Main { IntBinaryOperator func = (int a, int b) -> { return a - b; }; int ans = func.applyAsInt(5, 3); System.out.println("5 - 3 = " + ans); } }
省略記法
- 左オペランドで変数の型が特定される場合、ラムダ式の引数の型は省略できる
- ラムダ式の引数が1つの場合、ラムダ式の丸カッコも省略できる
IntToDoubleFunction func = x -> { return x * x * 3.14; };
- ラムダ式のロジックが単一の return文の場合、return文字と波括弧も省略できる
IntToDoubleFunction func = x -> x * x * 3.14;
例
# FuncList.java public class FuncList { public static boolean isOdd(int x) { return (x % 2 == 1); } public static String addMr(boolean male, String name) { if (male == true) { return "Mr." + name; } else { return "Ms." + name; } } }
# Main.java interface Func1 { boolean call(int x); } interface Func2 { String call(boolean male, String name); } Func1 f1 = x -> x % 2 ==1; Func2 f2 = (male, name) -> (male ? "Mr." : "Ms.") + name; // ラムダ式 + 三項演算子 }
その他
// 拡張for for (Monster monster : monsters) { monster.attack(sol); } // コレクション + Stream + ラムダ式 monsters.parallelStream().forEach(m -> m.attack(sol));
// 勇者インスタンスのHPを取り出す (Hero h) -> { return h.getHp(); } // 現在の日時を取り出す () -> { return new java.util.date(); } // long配列のコピーを作り、並べ替えたものを取り出す (long[] arrays) -> { long[] newArrays = java.util.Arrays.copyOf(arrays, arrays.length); java.util.Arrays.sort(newArrays); return newArrays; }