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