В рамках 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 .