В Java интерфейсы с одним абстрактным методом (т.е. типы SAM или функциональные интерфейсы) могут быть элегантно реализованы с помощью лямбда вместо анонимного класса:
    // SAM ActionListener with anonymous implementation
    button.addActionListener(
        new ActionListener(){
            public void actionPerformed(Event e){
                System.out.println("button via anon!");
            }
        }
    );
можно заменить на:
    // SAM ActionListener with lambda implementation
    button.addActionListener(
        e -> System.out.println("button via lambda!")
    );
Но для интерфейсов с несколькими абстрактными методами лямбда не может быть применена непосредственно. Например, java.awt.event.WindowListener имеет семь методов. Но часто кусок кода интересует только один из этих семи методов.
Чтобы реализовать поведение с переопределением анонимного класса, мы можем:
    // non-SAM with adapter implementation with override
    window.addWindowListener(
        new WindowAdapter() {
            @Override
            public void windowOpened(Event e){
                System.out.println("WindowAdapter opened via override!");
            }
        }
    );
но есть ли более элегантный способ с лямбдами?
@FunctionalInterface
public interface ActionListener {
    void actionPerformed(Event e);
}
public interface WindowListener {
    void windowOpened(Event e);
    void windowClosing(Event e);
}
public class WindowAdapter implements WindowListener {
    public void windowOpened(Event e){
        System.out.println("windowOpened in adapter!");
    }
    public void windowClosing(Event e){
        System.out.println("windowClosing in adapter!");
    }
}
Примечание: @maythesource.com задал аналогичный, но более широкий вопрос: "Что бы кто-то сделал с MouseListener, если они хотели реализовать несколько методов в анонимном классе?" Самый одобренный и принятый ответ - использовать анонимную реализацию. Мой вопрос касается элегантного лямбда-решения для не-SAM-типов. Поэтому этот вопрос не является дубликатом Java 8 Lambda Expressions - о нескольких методах в вложенном классе.
