Помните, что лямбда коротка.Он просто используется для определений методов, особенно для функциональных интерфейсов.Практически везде, где вы можете использовать объект, где вы определяете некоторую функцию (с простой логикой), вы также можете легко использовать Lambda.Хорошим примером для использования будет ActionListener.
Без лямбды мы можем сказать:
ActionListener al = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
};
С помощью лямбды мы можем сократить это до простого выражения:
ActionListener al = e -> System.out.println(e.getActionCommand());
Понятно, что они напрямую связаны друг с другом;«ActionEvent e» из оригинала просто объявляется как «e» во вторичном, так как компилятор уже знает, к какому типу он относится, и аналогичным образом мы можем определить тело метода, объявив, что он делает в единственной строке,
Теперь они также могут быть переданы в качестве параметров, потому что они, как и любой другой объект.Например, допустим, у нас был объект JButton, которому часто присваивается ActionListener.Обратите внимание, что JButton имеет метод JButton # addActionListener (ActionListener al).Теперь мы можем передать наш ActionListener любым из следующих способов:
JButton b = new JButton();
//Option One
ActionListener al = e -> System.out.println(e.getActionCommand());
b.addActionListener(al);
//Option Two
b.addActionListener(e -> System.out.println(e.getActionCommand()));
//Option Three
b.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
});
//Option Four
ActionListener al = new ActionListener() {
@Override
public void actionPerformed(ActionEvent e) {
System.out.println(e.getActionCommand());
}
};
b.addActionListener(al);
Все они логически эквивалентны!