Зачем нужны функциональные интерфейсы в Java и что они дают? И как они позволяют использовать lambda-выражения и функциональное программирование? — ДейлиПреп