407.99K
Категория: ПрограммированиеПрограммирование

Нововведения Java 8. Лямбды, функциональные интерфейсы

1.

О преподавателе:
Ралло Александр
Java разработчик
2 года коммерческого опыта
Работал с Intechcore GmbH
Разработка встраиваемого
программного компонента
*Руководитель проекта /
lead

2.

О вас:
Как зовут
Какие ожидания от курса.
Ваши цели
Какой имеете опыт
Образование, текущее место
работы
Еще пару слов о себе

3.

Тема: Нововведения java8. Лямбды,
функциональные интерфейсы
• 1. Познакомимся с основными изменениями java8
• 2. Вспомним анонимные классы
• 3. Подробно о лямбдах, функциональных интерфейсах
• 4. Примеры использования
• 5. Вопросы
• 6. Выводы
• 7. Полезные материалы

4.

Основные изменения java8
• 1. Stream API
• 2. Ссылки на методы
• 3. Дефолтные методы в интерфейсах
• 4. Лямбда-выражения
• 5. Функциональные интерфейсы

5.

Анонимные классы
• Анонимный класс – класс созданный без его объявления.
• Для создания экземпляра интерфейса мы можем использовать
следующий код:
IWriter writer = new IWriter() {
@Override
public void write() {
System.out.println(“Текст”);
}
}

6.

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

7.

Пример использования лямбда-выражения
• Вместо громоздкого написания следующего кода
List<String> names = Arrays.asList("peter", "anna", "mike", "xenia");
Collections.sort(names, new Comparator<String>() {
@Override
public int compare(String a, String b) { return b.compareTo(a); }
}
Можно использовать лаконичное лямбда-выражение
Collections.sort(names, (String a, String b) -> { return b.compareTo(a); });

8.

Функциональные интерфейсы
• Функциональные интерфейсы обязательно содержат только один
абстрактный метод. Так же может содержать любое количество
дефолтных методов.
Функциональные интерфейсы помечают аннотацией
@FunctionalInterface

9.

Функциональные интерфейсы java8
• В java8 существуют встроенные функциональные интерфейсы, а
именно:
Предикаты
Предикаты — это функции, принимающие один аргумент, и возвращающие значение типа boolean.
Predicate<String> predicate = (s) -> s.length() > 0;
Функции
Функции принимают один аргумент и возвращают некоторый результат.
Function<String, Integer> toInteger =(str) -> Integer.valueOf(str);

10.

Функциональные интерфейсы java8
Поставщики
Поставщики (suppliers) предоставляют результат заданного типа. В отличии от функций, поставщики не
принимают аргументов.
Supplier<String> stringSupplier = () -> new String(“Some string”);
Потребители
Потребители (consumers) представляют собой операции, которые производятся на одним входным
аргументом.
Consumer<String> consumer = (str) -> System.out.println(str);

11.

Вопросы
• 1. Какие нововведения java8 вы запомнили?
• 2. Что такое функциональный интерфейс, лямбда-выражение
• 3. Для чего они нужны
• 4. Какие запомнили встроенные функциональные интерфейсы?
• 5. Какие для чего служат?
• 6. Что такое effectively переменная?

12.

Выводы
• Для сокращения кода и его читабельности в java8 используются
лямбда-выражения. Они позволяют быстро описывать поведение
функционального интерфейса.
Функциональный интерфейс служит для выполнения какого-либо
метода. В java8 есть множество встроенных функциональных
интерфейсов для различных нужд

13.

Полезные материалы
• https://habr.com/ru/post/216431/
• https://javarush.ru/groups/posts/1037-osobennosti-java-8-maksimaljhnoe-rukovodstvo-chastjh-1
English     Русский Правила