Как стать автором
Обновить

JSR 335 или lambda-выражения в JAVA 8

Время на прочтение2 мин
Количество просмотров19K

Введение


Посетил вчера семинар по lambda-выражениям в JAVA 8. Рассказали много интересного.

Из интересностей:

lambda-выражения


Comparator<Integer> cmp = (x, y) -> (x < y) ? -1 : (x > y) ? 1 : 0;

Слева обязательный интерфейс, определяющий lambda. Справа выражение. Левая часть от "->" это сигнатура, правая — реализация.

Эта конструкция заменяет громоздкий код:

Comparator<Integer> comparator = new Comparator<Integer> () {
  public int compare(Integer x, Integer y) {
    return (x < y) ? -1 : (x > y) ? 1 : 0;
  }
};

lambda-выражения могут имплементировать любой функциональный интерфейс.Функциональный интерфейс — это интерфейс с одним абстрактным методом (об этом ниже). Также добавится куча полезных интерфейсов вроде Factory.make, Mapper.map. Ну и еще множество гибких возможностей использования и применения.

Также есть возможность вместо ручного описания лямбды брать ее реализацию из других классов:
Comparator<Integer> comparator = LibraryComparator::compare; // Некая реализация из библиотеки


Расширение интерфейсов default-методами (defender)


Да, теперь методы интерфейса делятся на абстрактные (не имеют реализации) и не абстрактные (default), которые имеют некую дефолтную реализацию. Это нововведение признано упростить расширение интерфейсов базовых сущностей JAVA, да и вообще любых интерфейсов с поддержкой совместимости. Например, имеется старый интерфейс:
public interface OldInterface {
    void method();
  }

Нам его надо расширить, но чтобы старый код продолжил работать. Добавим default-метод:
public interface OldInterface {
    void method();
    void newMethod() default {
      // default implementation
    }
  }

Писать или не писать слово default в интерфейсах — обсуждается.

Stream (bulk) операции


Классная штука, позволяющая гораздо гибче работать с коллекциями. Например, абстрактный пример в вакууме:
list.stream().parallel().reduce(Math::max).into(newList);

Попытались параллельно отсортировать коллекцию с указанным компаратором (может быть lambda), затем отфильтровали максимальный элемент и поместили это значение(-я) в другой список.

Подробнее о новых фишках: http://openjdk.java.net/projects/lambda/

О новых встречах: http://jug.ru/
Записывали видео, буду рад, если кто приведет ссылку на него для общественности.
Теги:
Хабы:
Всего голосов 14: ↑10 и ↓4+6
Комментарии24

Публикации

Истории

Работа

Java разработчик
443 вакансии

Ближайшие события

19 августа – 20 октября
RuCode.Финал. Чемпионат по алгоритмическому программированию и ИИ
МоскваНижний НовгородЕкатеринбургСтавропольНовосибрискКалининградПермьВладивостокЧитаКраснорскТомскИжевскПетрозаводскКазаньКурскТюменьВолгоградУфаМурманскБишкекСочиУльяновскСаратовИркутскДолгопрудныйОнлайн
24 – 25 октября
One Day Offer для AQA Engineer и Developers
Онлайн
25 октября
Конференция по росту продуктов EGC’24
МоскваОнлайн
26 октября
ProIT Network Fest
Санкт-Петербург
7 – 8 ноября
Конференция byteoilgas_conf 2024
МоскваОнлайн
7 – 8 ноября
Конференция «Матемаркетинг»
МоскваОнлайн
15 – 16 ноября
IT-конференция Merge Skolkovo
Москва
25 – 26 апреля
IT-конференция Merge Tatarstan 2025
Казань