Лямбда выражения(анонимные методы) - пришли в JAVA из функционального программирования, с помощью которого можем быстро без помощи анонимных классов реализовать интерфейс с одним методом(также может содержать default и static методы). Есть преимущество перед анонимными классами, так как после компиляции лямбда становиться методом класса. Также есть преимущества у многоядерных процессоров путем параллельной обработки коллекций. Лямбда позволяет хранить и передавать код как переменную.
@FunctionalInterface - аннотация метка которая при компиляции следит, чтобы интерфейс соответствовал условиям функционального интерфейса - только 1 абстрактный метод и позволяет другие default и static методы.
parameter -> {expression}
или
(parameter1, parameter2) -> {expression}
Runnable task = () -> { String threadName = Thread.currentThread().getName(); System.out.println("Hello " + threadName); }; Thread thread = new Thread(task); thread.start();