Статьи

Использование лямбда-выражения для сортировки списка в Java 8 с использованием поддержки лямбда-выражений Netbeans

В рамках JSR 335 лямбда-выражения вводятся в язык Java начиная с Java 8 и далее, и это является серьезным изменением в языке Java. Если вы хотите узнать больше о лямбда-выражениях what, а также о 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 выглядит примерно так:

AddJavaP_Netbeans

Теперь давайте рассмотрим список со следующим содержимым для нашего примера:

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_Lambda_Hint1

а затем с помощью поддержки 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 .