Существуют распространенные сценарии использования, которые требуют передачи (или сохранения) блока кода для последующего выполнения. Наиболее распространенными будут слушатели событий. Верьте или нет, в следующем фрагменте кода используется Java-конструкция с лямбда-выражением:
JButton button = new JButton("Push me!");
button.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
System.out.println("Pressed!");
}
});
Анонимный внутренний класс действует как лямбда, хотя и очень многословный. Немного неявной магии преобразования, мы можем написать следующий эквивалент в Scala:
val button = new JButton("Push me!")
button.addActionListener { e =>
println("Pressed!")
}
C # делает подобные вещи довольно легкими с делегатами и (еще лучше) лямбдами.