В рамках JSR 335 лямбда-выражения вводятся в язык Java начиная с Java 8 и далее, и это является серьезным изменением в языке Java. Если вы хотите узнать больше о лямбда-выражениях what, а также о JSR 335, вы можете посетить следующие ресурсы:
- Проект Лямбда на OpenJDK .
- Лямбда FAQ .
- Еще одно сообщение в блоге, в котором подробно рассматривается поддержка лямбда-выражений
- Проект спецификации JSR 335 .
Если я расскажу о каждой функции / изменениях, внесенных как часть JSR 335, то это будет сбивать меня с толку и вас. Поэтому, чтобы было легче оценить изменения, я выберу несколько вариантов использования и попытаюсь применить функции, добавленные как часть JSR. Прежде чем я начну, вам нужно скачать версию Netbeans, которая поддерживает синтаксис лямбда-выражений, а также сборку JDK, в которой есть изменения JSR 335.
- Сборка JDK, в которой есть изменения JSR 335, т.е. поддержка лямбда-выражений, а также усовершенствования API коллекций, можно загрузить здесь .
- Сборка Netbeans с экспериментальной поддержкой лямбда-выражений.
После того, как вы скачали zip-пакет для ночных сборок Netbeans, вам нужно будет извлечь его содержимое, а затем перейти в каталог bin, чтобы запустить Netbeans. И как только вы загрузили и извлекли содержимое JDK с поддержкой JSR335, вам нужно будет создать новую платформу в Netbeans из меню Сервис -> Платформы Java, чтобы использовать JDK с изменениями JSR335. Всплывающее окно добавления Java Platform выглядит примерно так:
Теперь давайте рассмотрим список со следующим содержимым для нашего примера:
|
1
2
3
4
5
|
List<Person> personList = new ArrayList<>();personList.add(new Person('Virat', 'Kohli'));personList.add(new Person('Arun', 'Kumar'));personList.add(new Person('Rajesh', 'Mohan'));personList.add(new Person('Rahul', 'Dravid')); |
и позволяет использовать предварительный Java 8 или текущий подход к сортировке этого списка на основе firstName:
|
1
2
3
4
5
6
|
//Sorting using Anonymous Inner class.Collections.sort(personList, new Comparator<Person>(){ public int compare(Person p1, Person p2){ return p1.firstName.compareTo(p2.firstName); }}); |
Если вы используете ночные сборки Netbeans, которые поддерживают лямбда-выражения, то в среде IDE появится подсказка:

а затем с помощью поддержки Netbeans заменить вышеприведенный код на лямбда-выражение, которое мы получаем:
|
1
2
|
//Anonymous Inner class replaced with Lambda expression.Collections.sort(personList, (Person p1, Person p2) -> p1.firstName.compareTo(p2.firstName)); |
Можно увидеть объем многословия, который был уменьшен с помощью лямбда-выражений. Кроме того, код теперь намного понятнее, чем когда мы использовали внутренние классы Anonymous. Можно сделать его еще более кратким, удалив информацию о типе из параметров, поскольку информация о типе выводится из контекста, в котором используется лямбда-выражение.
|
1
2
|
//Lambda expression with type information removed.Collections.sort(personList, (p1, p2) -> p1.firstName.compareTo(p2.firstName)); |
Давайте разберем вышеприведенное лямбда-выражение, чтобы понять его части. Общий синтаксис лямбда-выражения: () -> {} OR () -> одиночный символ / выражение. Версия () -> {} используется, когда тело лямбда-выражения должно быть блоком, а другая версия используется, когда лямбда-выражение имеет один стат / выражение. В приведенном выше случае есть одно выражение и, следовательно, блок здесь не используется. () Используется для объявления параметров лямбда-выражения. Параметры могут иметь информацию о типе или могут быть пропущены, если тип может быть выведен из контекста. В нашем случае информация о типе выводится из контекста. Другое наблюдение состоит в том, что лямбда-выражение эквивалентно переопределению метода сравнения, присутствующего в классе Comparator. И он также заменяет код, который создает класс Anonymous Inner для расширения класса Comparator.
Другое изменение, которое можно внести в приведенный выше код, заключается в том, что метод sort был добавлен в класс List как часть изменений JSR 335, и мы можем использовать этот метод для сортировки списка:
|
1
2
|
//Using sort method in List.personList.sort((p1, p2) -> p1.firstName.compareTo(p2.firstName)); |
Обратите внимание, что метод sort присутствует в классе List, который является частью JDK с поддержкой JSR 335. Это просто пример использования лямбда-выражений в нашем существующем коде. Для более подробной информации, пожалуйста, посетите ссылки, которыми я поделился в начале поста.
Ссылка: Использование лямбда-выражения для сортировки списка в Java 8 с помощью службы поддержки лямбда Netbeans от нашего партнера по JCG Мохамеда Санауллы в блоге Experiences Unlimited .
