Similar presentations:
Нововведения 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