Введение
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. Реализация пользовательской сортировки
Давайте рефакторим фрагмент кода, который сортирует список строк по их длине, используя анонимный класс.