Найти тему
DEBAGanov

Java 515. Что такое лямбда-выражения? Как эта функция изменила способ написания кода на Java? Объясните с некоторыми примерами до Java 8 и п

515. Что такое лямбда-выражения? Как эта функция изменила способ написания кода на Java? Объясните с некоторыми примерами до Java 8 и после Java 8?

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

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

List<String> list = Arrays.asList("a", "ab", "abc", "abcd", "abcde");
List<String> filteredList = filter(list, new Predicate<String>() {
@Override public boolean test(String s) {
return s.length() == 3;
}
});

public static <T> List<T> filter(List<T> list, Predicate<T> p) {
List<T> filteredList = new ArrayList<>();
for (T t : list) {
if (p.test(t)) {
filteredList.add(t);
}
}
return filteredList;
}

В Java 8 тот же функционал можно реализовать используя лямбда-выражения:

List<String> list = Arrays.asList("a", "ab", "abc", "abcd", "abcde");
List<String> filteredList = filter(list, s -> s.length() == 3);

public static <T> List<T> filter(List<T> list, Predicate<T> p) {
List<T> filteredList = new ArrayList<>();
for (T t : list) {
if (p.test(t)) {
filteredList.add(t);
}
}
return filteredList;
}

Как видно из примера, использование лямбда-выражений позволяет определять функциональность непосредственно в параметрах метода или конструктора, что делает код более компактным и удобочитаемым.

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

1606 вопрос-ответ по Java: https://github.com/DEBAGanov/interview_questions

Tелеграмм канал: https://t.me/DEBAGanov

Мое резюме: https://github.com/DEBAGanov