Лямбда функція - анонімна функція, яка реалізує функціональний інтерфейс. Тобто може використовуватись тільки як реалізація того чи іншого функціонального інтерфейсу. Лямбда функції ввели для того, щоб скоротити кількість коду. Також можна використовувати лямбда функції для реалізації узагальнених функціональних інтерфейсів.
Синатксис - (PARAMETER) -> text.methodName();, де (PARAMETER) - параметр, або набір параметрів, -> - лямбда оператор, text.methodName() тіло функції.
Обмеження лямбда функцій
- не можна оголошувати статичні змінні і класи скрім констант
static final - не можна оголошувати інтерфейс
- не можна оголошувати enum
Синтаксис () -> new TestBrokenException() еквівалентно TestBrokenException::new. Де :: - оператор посилання на метод.
Optional - клас обгортка для значеннь які зокрема можуть безпечно приймати null. Використовується для зменшення кількості коду та збільшенню надійності при роботі з null. Клас Optional використовується у випадках, коли метод може повернути посилання зі значенням null, що в свою чергу може призвести до NPE. Класичне застосування - задача пошуку (це дає змогу вияснити що потрібно повернути, коли результатів немає).
- Основні методи які використовуються найчастіше:
isPresent()іget(). - Optional може повертати об'єкт за замовчуванням за допомогою методів
T orElse(T other), абоT orElseGet(Supplier <? extends T> supplier). - Щоб згенерувати виключення, замість тього щоб обгортати метод в
try/catchможна використати методиorElseThrow(Supplier <? extends t> exceptionSupplier)для jdk 1.8,orElseThrow()для jdk 1.11. - Для перетворення значеннь які містяться в об'єкті класу optional можна використовувати методи
filter(),map(),flatMap()іor(). - Optional містить метод
stream(), Stream API власне є складовою Optional.
Варто застосовувати Optional
- Методи пошуку
- Методи отримання об'єкту
- Якщо метод може містити множинні параметри null
НЕ варто використовувати Optional
- В якості полів класу (не серіалізується)