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

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/
Записывали видео, буду рад, если кто приведет ссылку на него для общественности.
Теги:
Хабы:
+6
Комментарии24

Публикации

Изменить настройки темы

Истории

Работа

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

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

Weekend Offer в AliExpress
Дата20 – 21 апреля
Время10:00 – 20:00
Место
Онлайн
Конференция «Я.Железо»
Дата18 мая
Время14:00 – 23:59
Место
МоскваОнлайн