Введение

Java, будучи одним из самых известных языков программирования, постоянно развивался. Одной из замечательных функций, появившихся в Java 8, являются лямбда-выражения. Lambdas, наряду с функциональными интерфейсами, упростили написание более читаемого и лаконичного кода. В этой статье мы рассмотрим, как реорганизовать существующий код Java, включив в него лямбда-выражения и функциональные интерфейсы, чтобы сделать ваши программы более чистыми и удобными в сопровождении.

Понимание лямбда-выражений

Лямбда-выражения — это анонимные функции; у них нет имени, и их можно использовать для реализации метода, определенного функциональным интерфейсом. По сути, лямбда-выражение — это короткий блок кода, который принимает параметры и возвращает значение.

Синтаксис:

(parameters) -> { statements; }

Понимание функциональных интерфейсов

Функциональный интерфейс — это интерфейс только с одним абстрактным методом (помимо методов класса Object). Лямбда-выражения можно использовать как экземпляры функционального интерфейса. Некоторыми распространенными встроенными функциональными интерфейсами в Java являются Runnable, Callable, Comparator и Predicate.

Теперь давайте углубимся в рефакторинг на практических примерах.

Пример 1: рефакторинг анонимных классов

До Java 8 вы часто использовали анонимные классы, особенно при работе с потоками или прослушивателями событий. Давайте реорганизуем следующий фрагмент кода, использующий анонимный класс, в более сжатую версию с использованием лямбда-выражений.

Старый подход:

new Thread(new Runnable() {
    @Override
    public void run() {
        System.out.println("Running in a thread");
    }
}).start();

Рефакторинг с использованием Lambdas:

new Thread(() -> System.out.println("Running in a thread")).start();

Пример 2. Реализация пользовательской сортировки

Давайте рефакторим фрагмент кода, который сортирует список строк по их длине, используя анонимный класс.