ラムダ式というのがどうしようもなく理解できなかったので、自分なりに簡略化して理解した結果を記載しています。
#無名関数
まず無名関数についてWikipediaから抜粋。
プログラミング言語における無名関数(英語: anonymous functionあるいはnameless function)[1]とは、名前付けされずに定義された関数のことである。
無名関数を表現するための方法には様々なものがあるが、近年[2]主流となっているのはラムダ式による記法である。
(Wikipedia(https://ja.wikipedia.org/wiki/無名関数))
#ラムダ式
つまり、ラムダ式とは無名関数を表現するための方法。(「->」こんなやつ)
→ラムダ式とは名前付けされずに定義された関数のこと。
ちなみにJavaで書く場合はこんな感じ。(Wikipediaの無名関数から抜粋。)
import java.util.function.*;
...
BiFunction<Integer, Integer, Integer> add = (x, y) -> x + y;
System.out.println(add.apply(2, 3));
↑この例で説明すると
・「(x,y)」が無名の関数の引数を表現している。
・「x + y」が関数の処理を表している。(この例では省略されているが「{return x + y}」のように表現しても良い。この方がメソッド感があってわかりやすいと思う。)
#関数型インタフェース
そもそもなんのために無名関数を使うの?ということで出てくるのが関数型インタフェース。
これざっくりいうと関数(ラムダ式やメソッド参照)を代入できるインターフェイスである。
例えばBiFunctionというインターフェイスは、
型パラメータ:
T - 関数の第1引数の型
U - 関数の第2引数の型
R - 関数の結果の型
→引数2つで戻り値を返す関数を代入できるインタフェース。
つまり、さっきの例の無名関数をこのインタフェースに代入して、このインタフェースに定義されているメソッド(apply)を呼び出すと無名関数の処理が呼び出される。
↓これの結果は、applyに引数として2,3を渡しているので2+3の結果が標準出力される。
BiFunction<Integer, Integer, Integer> add = (x, y) -> {return x + y;};
System.out.println(add.apply(2, 3));
今までJavaで関数を変数に代入するという考え方をしてこなかったので理解するのが難しいのではないかと思います。
JavaScriptの本を読んでいると結構あたりまえに出てくる概念のようですし。