🗊Презентация Современные технологии программирования. λ-выражения в Java 8. Функция как параметр

Нажмите для полного просмотра!
Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №1Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №2Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №3Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №4Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №5Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №6Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №7Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №8Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №9Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №10Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №11Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №12Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №13Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №14Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №15Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №16Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №17Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №18Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №19Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №20Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №21Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №22Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №23Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №24Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №25Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №26Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №27Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №28Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №29Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №30Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №31Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №32Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №33Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №34Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №35Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №36Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №37Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №38Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №39Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №40Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №41Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №42Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №43Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №44Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №45Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №46Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №47Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №48Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №49Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №50Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №51Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №52Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №53Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №54Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №55Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №56Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №57Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №58Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №59Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №60Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №61Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №62Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №63Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №64Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №65Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №66Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №67Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №68Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №69Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №70Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №71Современные технологии программирования. λ-выражения в Java 8. Функция как параметр, слайд №72

Содержание

Вы можете ознакомиться и скачать презентацию на тему Современные технологии программирования. λ-выражения в Java 8. Функция как параметр. Доклад-сообщение содержит 72 слайдов. Презентации для любого класса можно скачать бесплатно. Если материал и наш сайт презентаций Mypresentation Вам понравились – поделитесь им с друзьями с помощью социальных кнопок и добавьте в закладки в своем браузере.

Слайды и текст этой презентации


Слайд 1





Современные технологии программирования
λ-выражения в Java 8
Описание слайда:
Современные технологии программирования λ-выражения в Java 8

Слайд 2





Функция как параметр
Во многих языках функцию можно передавать в качестве параметра
Динамическое определение типа:
JavaScript, Lisp, Sceme, …
Строгая типизация:
Ruby, Scala, …
Функциональный подход позволяет писать более краткий и результативный код
	Javascript:
Описание слайда:
Функция как параметр Во многих языках функцию можно передавать в качестве параметра Динамическое определение типа: JavaScript, Lisp, Sceme, … Строгая типизация: Ruby, Scala, … Функциональный подход позволяет писать более краткий и результативный код Javascript:

Слайд 3





Основное преимущество:
лаконичный и выразительный код 
Java 7
Java 8
Описание слайда:
Основное преимущество: лаконичный и выразительный код Java 7 Java 8

Слайд 4





Дополнительное преимущество:
новый способ мышления 
Функциональный подход: многие классы задач решаются проще, код становится легким для чтения, что упрощает его дальнейшее сопровождение.
Поддержка потоков: потоки являются обертками источников данных (массивы, коллекции, …), которые используют лямбда-выражения.
Описание слайда:
Дополнительное преимущество: новый способ мышления Функциональный подход: многие классы задач решаются проще, код становится легким для чтения, что упрощает его дальнейшее сопровождение. Поддержка потоков: потоки являются обертками источников данных (массивы, коллекции, …), которые используют лямбда-выражения.

Слайд 5





Основные моменты
Вы пишете код, который похож на функцию
И получаете экземпляр класса, который реализует интерфейс, который ожидается в данном случае.
Интерфейс содержит ТОЛЬКО ОДИН абстрактный метод
Такой интерфейс называется функциональным или SAM-интерфейсом (Single Abstract Method). Он является типом лямбда-выражения.
Описание слайда:
Основные моменты Вы пишете код, который похож на функцию И получаете экземпляр класса, который реализует интерфейс, который ожидается в данном случае. Интерфейс содержит ТОЛЬКО ОДИН абстрактный метод Такой интерфейс называется функциональным или SAM-интерфейсом (Single Abstract Method). Он является типом лямбда-выражения.

Слайд 6





λ-выражение
Анонимная функция
Выражение описывающее анонимную функцию
Выражение описывающее анонимную функцию, результатом исполнения которого является некоторый объект, реализующий требуемый функциональный интерфейс
Описание слайда:
λ-выражение Анонимная функция Выражение описывающее анонимную функцию Выражение описывающее анонимную функцию, результатом исполнения которого является некоторый объект, реализующий требуемый функциональный интерфейс

Слайд 7





Где используют λ-выражения 
В переменной или параметре, где ожидается интерфейс с одним методом 
В коде, который использует интерфейс



В коде, который вызывает интерфейс, можно использовать λ-выражение
Описание слайда:
Где используют λ-выражения В переменной или параметре, где ожидается интерфейс с одним методом В коде, который использует интерфейс В коде, который вызывает интерфейс, можно использовать λ-выражение

Слайд 8





λ-выражение как аргумент метода
Arrays.sort(testStrings,  
    (s1, s2) -> s1.length() - s2.length());
taskList.execute(() -> downloadSomeFile());
someButton.addActionListener(
     event -> handleButtonClick());
double d = MathUtils.integrate(
     x -> x*x, 0, 100, 1000);
Описание слайда:
λ-выражение как аргумент метода Arrays.sort(testStrings, (s1, s2) -> s1.length() - s2.length()); taskList.execute(() -> downloadSomeFile()); someButton.addActionListener( event -> handleButtonClick()); double d = MathUtils.integrate( x -> x*x, 0, 100, 1000);

Слайд 9





λ-выражение как переменная
AutoCloseable c = () -> cleanupForTryWithResources();

Thread.UncaughtExceptionHandler handler = (thread, exception) -> doSomethingAboutException();

Formattable f = (formatter,flags,width,precision) -> makeFormattedString();

ContentHandlerFactory fact = mimeType -> createContentHandlerForMimeType();
Описание слайда:
λ-выражение как переменная AutoCloseable c = () -> cleanupForTryWithResources(); Thread.UncaughtExceptionHandler handler = (thread, exception) -> doSomethingAboutException(); Formattable f = (formatter,flags,width,precision) -> makeFormattedString(); ContentHandlerFactory fact = mimeType -> createContentHandlerForMimeType();

Слайд 10





Итоги: упрощение синтаксиса
Замена кода
на код
Описание слайда:
Итоги: упрощение синтаксиса Замена кода на код

Слайд 11





Пример
Было
Стало
Описание слайда:
Пример Было Стало

Слайд 12





Сортировка строк по длине
Было
Стало
Описание слайда:
Сортировка строк по длине Было Стало

Слайд 13





Выведение типов
В списке аргументов можно пренебречь указанием типов
Общий вид λ-выражения
(тип1 var1, тип2 var2 ...) -> { тело метода } 
λ-выражение с выведением типов
(var1, var2 ...) -> { тело метода }
Описание слайда:
Выведение типов В списке аргументов можно пренебречь указанием типов Общий вид λ-выражения (тип1 var1, тип2 var2 ...) -> { тело метода } λ-выражение с выведением типов (var1, var2 ...) -> { тело метода }

Слайд 14





Сортировка строк по длине
Было
Стало
Описание слайда:
Сортировка строк по длине Было Стало

Слайд 15





Возвращаемое значение
В теле метода используйте выражение, а не блок. 
Значение выражения будет возвращено.
Если тип возвращаемого значения void, то метод ничего не вернет. 
Было
(var1, var2 ...) -> { return выражение } 
Стало
(var1, var2 ...) -> выражение
Описание слайда:
Возвращаемое значение В теле метода используйте выражение, а не блок. Значение выражения будет возвращено. Если тип возвращаемого значения void, то метод ничего не вернет. Было (var1, var2 ...) -> { return выражение } Стало (var1, var2 ...) -> выражение

Слайд 16





Сортировка строк по длине
Было
Стало
Описание слайда:
Сортировка строк по длине Было Стало

Слайд 17





Скобки
Если метод зависит от одного аргумента, скобки можно опустить.
В таком случае тип аргумента не указывается.
Было
Стало
Описание слайда:
Скобки Если метод зависит от одного аргумента, скобки можно опустить. В таком случае тип аргумента не указывается. Было Стало

Слайд 18





Новый синтаксис
Было
Стало
Описание слайда:
Новый синтаксис Было Стало

Слайд 19





Использование значений
Лямбда-выражения могут ссылаться на переменные, которые не объявлены как final (но значение таким переменным можно присвоить только один раз)
Такие переменные называются эффективно финальными (их можно корректно объявить как final)
Также можно ссылаться на изменяемые переменные экземпляра: “this” в лямбда-выражении ссылается на главные класс (не вложенный, который создается для лямбда-выражения) 
Явное объявление
Эффективно финальная переменная
Описание слайда:
Использование значений Лямбда-выражения могут ссылаться на переменные, которые не объявлены как final (но значение таким переменным можно присвоить только один раз) Такие переменные называются эффективно финальными (их можно корректно объявить как final) Также можно ссылаться на изменяемые переменные экземпляра: “this” в лямбда-выражении ссылается на главные класс (не вложенный, который создается для лямбда-выражения) Явное объявление Эффективно финальная переменная

Слайд 20





Аннотация @Override 
Какой смысл использовать аннотацию @Override?
Корректный код будет работать и без @Override, но @Override
Отслеживает ошибки во время компиляции
Описывает суть метода
Сообщает остальным разработчикам, что данный метод из супер-класса, и в HttpServlet API описана его реализация
Описание слайда:
Аннотация @Override Какой смысл использовать аннотацию @Override? Корректный код будет работать и без @Override, но @Override Отслеживает ошибки во время компиляции Описывает суть метода Сообщает остальным разработчикам, что данный метод из супер-класса, и в HttpServlet API описана его реализация

Слайд 21





Аннотация @FunctionalInterface
Отслеживает ошибки во время компиляции
Если разработчик добавит второй абстрактный метод в интерфейс, интерфейс не будет скомпилирован.
Описывает суть интерфейса
Сообщает остальным разработчикам, что данный интерфейс будет использоваться с лямбда-выражениями
Аннотация не обязательна
Описание слайда:
Аннотация @FunctionalInterface Отслеживает ошибки во время компиляции Если разработчик добавит второй абстрактный метод в интерфейс, интерфейс не будет скомпилирован. Описывает суть интерфейса Сообщает остальным разработчикам, что данный интерфейс будет использоваться с лямбда-выражениями Аннотация не обязательна

Слайд 22





Пример. Численное интегрирование
Обычное численное интегрирование методом средних прямоугольников
Описание слайда:
Пример. Численное интегрирование Обычное численное интегрирование методом средних прямоугольников

Слайд 23





Пример. Численное интегрирование
Использовать лямбда-выражения для интегрируемой функции.
Определить функциональный интерфейс с методом double eval(double x) для описания интегрируемой функции.
Для проверки интерфейса во время компиляции и для объявления, что интерфейс функциональный и его можно использовать в лямбда-выражениях, используем аннотацию @FunctionalInterface
Описание слайда:
Пример. Численное интегрирование Использовать лямбда-выражения для интегрируемой функции. Определить функциональный интерфейс с методом double eval(double x) для описания интегрируемой функции. Для проверки интерфейса во время компиляции и для объявления, что интерфейс функциональный и его можно использовать в лямбда-выражениях, используем аннотацию @FunctionalInterface

Слайд 24





Интерфейс @Integrable
Описание слайда:
Интерфейс @Integrable

Слайд 25





Метод численного интегрирования
Описание слайда:
Метод численного интегрирования

Слайд 26





Метод для тестирования
Описание слайда:
Метод для тестирования

Слайд 27





Тестирование
Описание слайда:
Тестирование

Слайд 28





Ссылка на методы
Можно использовать ссылку ИмяКласса::имяСтатическогоМетода или имяПеременной::методЭкземпляраКласса в лямбда-выржениях
Например, Math::cos или myVar::myMethod
Это еще один способ задания функции, которая уже описана, в данном случае не нужно писать лямбда-выражение, вместо этого используйте ссылку на этот метод
Функция должны соответствовать сигнатуре метода функционального интерфейса
Тип определяется только из контекста
Описание слайда:
Ссылка на методы Можно использовать ссылку ИмяКласса::имяСтатическогоМетода или имяПеременной::методЭкземпляраКласса в лямбда-выржениях Например, Math::cos или myVar::myMethod Это еще один способ задания функции, которая уже описана, в данном случае не нужно писать лямбда-выражение, вместо этого используйте ссылку на этот метод Функция должны соответствовать сигнатуре метода функционального интерфейса Тип определяется только из контекста

Слайд 29





Пример. Численное интегрирование
Описание слайда:
Пример. Численное интегрирование

Слайд 30





Пакет java.util.function 
Такие интерфейсы как Integrable очень широко используются.
Поэтому в Java 8 нужны интерфейсы с более общим названием, который можно применять в подобных случаях.
Пакет java.util.function определяет множество простых функциональных (SAM) интерфейсов.
Они называются согласно аргументам и возвращаемым значениям.
Описание слайда:
Пакет java.util.function Такие интерфейсы как Integrable очень широко используются. Поэтому в Java 8 нужны интерфейсы с более общим названием, который можно применять в подобных случаях. Пакет java.util.function определяет множество простых функциональных (SAM) интерфейсов. Они называются согласно аргументам и возвращаемым значениям.

Слайд 31





Пакет java.util.function 
Например, можно заменить интерфейс Integrable на встроенный функциональный интерфейс DoubleUnaryOperator.
Для того, чтобы узнать имя метода, нужно посмотреть API.
Не смотря на то, что лямбда-выражения не ссылаются на имя метода, код, в котором используются лямбда-выражения должен ссылаться на соответствующие методы интерфейса.
Описание слайда:
Пакет java.util.function Например, можно заменить интерфейс Integrable на встроенный функциональный интерфейс DoubleUnaryOperator. Для того, чтобы узнать имя метода, нужно посмотреть API. Не смотря на то, что лямбда-выражения не ссылаются на имя метода, код, в котором используются лямбда-выражения должен ссылаться на соответствующие методы интерфейса.

Слайд 32





Типизированные и обобщенные интерфейсы
Тип задан
Примеры (существует множество других интерфейсов) 
IntPredicate (int in, boolean out)
LongUnaryOperator (long in, long out)
DoubleBinaryOperator(double in1, double in2, double out)
Пример
DoubleBinaryOperator f = 
				(d1, d2) -> Math.cos(d1 + d2);
Обобщенные
Также существуют обобщенные интерфейсы (Function<T,R>, Predicate<T>) с более широкой степенью применения
Описание слайда:
Типизированные и обобщенные интерфейсы Тип задан Примеры (существует множество других интерфейсов) IntPredicate (int in, boolean out) LongUnaryOperator (long in, long out) DoubleBinaryOperator(double in1, double in2, double out) Пример DoubleBinaryOperator f = (d1, d2) -> Math.cos(d1 + d2); Обобщенные Также существуют обобщенные интерфейсы (Function<T,R>, Predicate<T>) с более широкой степенью применения

Слайд 33





Пример. Численное интегрирование
Описание слайда:
Пример. Численное интегрирование

Слайд 34





Пример. Численное интегрирование
Описание слайда:
Пример. Численное интегрирование

Слайд 35





Интерфейсы java.util.function
Описание слайда:
Интерфейсы java.util.function

Слайд 36





Общий случай
Описание слайда:
Общий случай

Слайд 37





Общий случай
Описание слайда:
Общий случай

Слайд 38





Интерфейс Predicate
boolean test(T t)
Позволяет задать «функцию» для проверки условия•
Преимущество
Позволяет искать по коллекции элементы, которые соответствуют условию, написать гораздо более краткий код, чем без лямбда-выражений
Пример синтаксиса
Описание слайда:
Интерфейс Predicate boolean test(T t) Позволяет задать «функцию» для проверки условия• Преимущество Позволяет искать по коллекции элементы, которые соответствуют условию, написать гораздо более краткий код, чем без лямбда-выражений Пример синтаксиса

Слайд 39





Пример. Без Predicate
Поиск сотрудника по имени
Описание слайда:
Пример. Без Predicate Поиск сотрудника по имени

Слайд 40





Пример. Без Predicate
Поиск сотрудника по зарплате
Описание слайда:
Пример. Без Predicate Поиск сотрудника по зарплате

Слайд 41





Рефакторинг 1
Поиск первого сотрудника, удовлетворяющего условию
Описание слайда:
Рефакторинг 1 Поиск первого сотрудника, удовлетворяющего условию

Слайд 42





Рефакторинг 1. Преимущества 
Теперь можно передать различные функции для поиска по разным критериям. Код более краткий и понятный.
Но код по-прежнему «привязан» к классу Employee
Описание слайда:
Рефакторинг 1. Преимущества Теперь можно передать различные функции для поиска по разным критериям. Код более краткий и понятный. Но код по-прежнему «привязан» к классу Employee

Слайд 43





Рефакторинг 2
Поиск первого сотрудника, удовлетворяющего условию
Описание слайда:
Рефакторинг 2 Поиск первого сотрудника, удовлетворяющего условию

Слайд 44





Метод firstMatch
Описание слайда:
Метод firstMatch

Слайд 45





Метод firstMatch
Описание слайда:
Метод firstMatch

Слайд 46





Интерфейс Function
R apply(T t)
Позволяет задать «функцию», которая принимает аргумент T  и возвращает R.
Интерфейс BiFunction работает аналогичным образом, но метод apply принимает два аргумента типа T.
Преимущество
Позволяет преобразовать значение или коллекцию значений, написать гораздо более краткий код, чем без лямбда-выражений
Описание слайда:
Интерфейс Function R apply(T t) Позволяет задать «функцию», которая принимает аргумент T и возвращает R. Интерфейс BiFunction работает аналогичным образом, но метод apply принимает два аргумента типа T. Преимущество Позволяет преобразовать значение или коллекцию значений, написать гораздо более краткий код, чем без лямбда-выражений

Слайд 47





Интерфейс Function
Пример синтаксиса
Описание слайда:
Интерфейс Function Пример синтаксиса

Слайд 48





Пример. Без Function
Вычисление суммы зарплат сотрудников
Описание слайда:
Пример. Без Function Вычисление суммы зарплат сотрудников

Слайд 49





Пример. С Function
Вычисление суммы произвольных объектов
Описание слайда:
Пример. С Function Вычисление суммы произвольных объектов

Слайд 50





Интерфейс BinaryOperator
T apply(T t1, T t2)
Позволяет задать «функцию», которая принимает два аргумента T  и возвращает T
Синтаксис
Описание слайда:
Интерфейс BinaryOperator T apply(T t1, T t2) Позволяет задать «функцию», которая принимает два аргумента T и возвращает T Синтаксис

Слайд 51





Применение BinaryOperator
Делает mapSum более гибкой
Вместо 
mapSum(List<T> entries, Function<T, Integer> mapper)
Можно обобщить ее, передав оператор (который был жестко задан в методе mapSum):
mapCombined(List<T> entries,
            Function<T, R> mapper,
            BinaryOperator<R> combiner)
Описание слайда:
Применение BinaryOperator Делает mapSum более гибкой Вместо mapSum(List<T> entries, Function<T, Integer> mapper) Можно обобщить ее, передав оператор (который был жестко задан в методе mapSum): mapCombined(List<T> entries, Function<T, R> mapper, BinaryOperator<R> combiner)

Слайд 52





Интерфейс Consumer
void accept(T t)
Позволяет задать «функцию», которая принимает аргумент T и выполняет некоторый побочный эффект
Синтаксис
Описание слайда:
Интерфейс Consumer void accept(T t) Позволяет задать «функцию», которая принимает аргумент T и выполняет некоторый побочный эффект Синтаксис

Слайд 53





Применение Consumer
Во встроенном метода forEach класса Stream используется интерфейс Consumer
employees.forEach(
e -> e.setSalary(e.getSalary()*11/10))

values.forEach(System.out::println)

textFields.forEach(field -> field.setText(""))
Описание слайда:
Применение Consumer Во встроенном метода forEach класса Stream используется интерфейс Consumer employees.forEach( e -> e.setSalary(e.getSalary()*11/10)) values.forEach(System.out::println) textFields.forEach(field -> field.setText(""))

Слайд 54





Интерфейс Supplier
T get()
Позволяет задать «функцию» без аргументов и возвращает T. и выполняет некоторый побочный эффект
Синтаксис
Описание слайда:
Интерфейс Supplier T get() Позволяет задать «функцию» без аргументов и возвращает T. и выполняет некоторый побочный эффект Синтаксис

Слайд 55





Область видимости переменных
Лямбда-выражения используют статические области действия переменных
Выводы:
Ключевое слово this ссылается на внешний класс, а не на анонимный (тот, в который преобразуется лямбда-выражение)
Нет переменной OuterClass.this
До тех пор, пока лямбда внутри вложенного класса
Лямбда не может создавать новые переменные с такими же именами как у метода, вызвавшего лямбда
Лямбда может ссылаться (но не изменять) локальные переменные из окружающего кода
Лямбда может обращаться (и изменять) переменные экземпляра окружающего класса
Описание слайда:
Область видимости переменных Лямбда-выражения используют статические области действия переменных Выводы: Ключевое слово this ссылается на внешний класс, а не на анонимный (тот, в который преобразуется лямбда-выражение) Нет переменной OuterClass.this До тех пор, пока лямбда внутри вложенного класса Лямбда не может создавать новые переменные с такими же именами как у метода, вызвавшего лямбда Лямбда может ссылаться (но не изменять) локальные переменные из окружающего кода Лямбда может обращаться (и изменять) переменные экземпляра окружающего класса

Слайд 56





Примеры
Ошибка: повторное использование имени переменной 
double x = 1.2;
someMethod(x -> doSomethingWith(x));
Ошибка: повторное использование имени переменной 
double x = 1.2;
someMethod(y -> { double x = 3.4; ... });

Ошибка: лямбда изменяет локальную переменную
double  x = 1.2;
someMethod(y -> x = 3.4);
Описание слайда:
Примеры Ошибка: повторное использование имени переменной double x = 1.2; someMethod(x -> doSomethingWith(x)); Ошибка: повторное использование имени переменной double x = 1.2; someMethod(y -> { double x = 3.4; ... }); Ошибка: лямбда изменяет локальную переменную double x = 1.2; someMethod(y -> x = 3.4);

Слайд 57





Примеры
Изменение переменной экземпляра
private double x = 1.2;
public void foo() { someMethod(y -> x = 3.4);}
Имя переменной в лямбда совпадает с именем переменной экземпляра
private double x = 1.2;
public void bar() { 
   someMethod(x -> x + this.x);
}
Описание слайда:
Примеры Изменение переменной экземпляра private double x = 1.2; public void foo() { someMethod(y -> x = 3.4);} Имя переменной в лямбда совпадает с именем переменной экземпляра private double x = 1.2; public void bar() { someMethod(x -> x + this.x); }

Слайд 58





Ссылка на методы
Ссылки  на методы можно использовать в лямбда-выражениях.
Если есть метод, сигнатура которого совпадает с сигнатурой абстрактного метода функционального интерфейса, можно использовать ссылку ИмяКласса::имяМетода.
Описание слайда:
Ссылка на методы Ссылки на методы можно использовать в лямбда-выражениях. Если есть метод, сигнатура которого совпадает с сигнатурой абстрактного метода функционального интерфейса, можно использовать ссылку ИмяКласса::имяМетода.

Слайд 59





Ссылка на методы
Описание слайда:
Ссылка на методы

Слайд 60





Вызов метода экземпляра класса
  переменная::методЭкземпляраКласса 
Создает лямбда-выражение, которое принимает то количество аргументов, которое указано в методе.
String test = "PREFIX:";
List<String> result1 = transform(strings, test::concat);
  Класс::методЭкземпляраКласса 
Создает лямбда-выражение, которое принимает на один аргумент больше, чем соответствующий метод. Первый аргумент – объект, от которого вызывается метод, остальные аргументы –  параметры метода.
List<String> result2=
           transform(strings,String::toUpperCase);
Описание слайда:
Вызов метода экземпляра класса переменная::методЭкземпляраКласса Создает лямбда-выражение, которое принимает то количество аргументов, которое указано в методе. String test = "PREFIX:"; List<String> result1 = transform(strings, test::concat); Класс::методЭкземпляраКласса Создает лямбда-выражение, которое принимает на один аргумент больше, чем соответствующий метод. Первый аргумент – объект, от которого вызывается метод, остальные аргументы – параметры метода. List<String> result2= transform(strings,String::toUpperCase);

Слайд 61





Методы по умолчанию
Описание слайда:
Методы по умолчанию

Слайд 62





Исходный код Function
Описание слайда:
Исходный код Function

Слайд 63





Методы, возвращающие лямбда
Описание слайда:
Методы, возвращающие лямбда

Слайд 64





Методы интерфейса Predicate
Описание слайда:
Методы интерфейса Predicate

Слайд 65





Методы интерфейса Predicate
Описание слайда:
Методы интерфейса Predicate

Слайд 66





Пример
Описание слайда:
Пример

Слайд 67





Методы интерфейса Function
Описание слайда:
Методы интерфейса Function

Слайд 68





Цепочки функций
Описание слайда:
Цепочки функций

Слайд 69





Пример
Описание слайда:
Пример

Слайд 70





Пример
Описание слайда:
Пример

Слайд 71





Методы интерфейса Consumer
Описание слайда:
Методы интерфейса Consumer

Слайд 72





Пример
Описание слайда:
Пример



Похожие презентации
Mypresentation.ru
Загрузить презентацию