多くの言語では内部イテレータで行う処理を関数もしくはクロージャで記述する。
Javaではクロージャは使用できないので、匿名クラスを使う。
たとえば、コレクションの要素を出力する場合、次のように記述できる。
Collection<String> texts = ... ;
texts.forEach(new Consumer<String>() {
@Override
public void accept(String text) {
System.out.println(text);
}
});
for文の代用として使用できる内部イテレータのメソッドがforEachメソッドなる。
forEachメソッドの引数はConsumerインタフェースを実装した匿名クラスになっている。
実際に行いたい処理はConsumerインタフェースのacceptメソッドに書いてあるprintlnメソッドだけでも、匿名クラスを定義しなくてはいけないため、冗長 な記述になってしまう。
ラムダ式を使えば、匿名クラスを簡潔に記述することができる。
Collection<String> texts = ... ;
texts.forEach(text -> System.out.println(text));