Реклама

Если вы программист на Java и хотите узнать больше о лямбдах на Java 8, в этой статье мы подробнее рассмотрим синтаксис и использование лямбда-выражений.

лямбда-выражение в Java это краткий способ выразить метод класса в выражении. Имеет список параметров и тело. Тело может быть единым выражение или блок 10 основных концепций Java, которые вы должны изучить при начале работыНезависимо от того, пишете ли вы графический интерфейс, разрабатываете программное обеспечение на стороне сервера или мобильное приложение на базе Android, изучение Java хорошо вам подойдет. Вот некоторые основные концепции Java, которые помогут вам начать работу. Читать далее . Обычно используется там, где требуется реализация интерфейса. Эта необходимость обычно возникает, когда в качестве аргумента для вызова метода требуется интерфейс.

Некоторые простые лямбда-выражения

Давайте посмотрим на несколько простых примеров лямбда-выражений.

Ниже приведено лямбда-выражение, которое принимает два числа Икс а также Y и вычисляет сумму.

instagram viewer
(int x, int y) -> x + y; 

Удалите типы параметров для более краткого представления:

(х, у) -> х + у; 

Определите функцию, которая не принимает параметров:

() -> 404; 

Также допустимо следующее, которое не принимает параметров и ничего не возвращает:

() -> {}

Нет необходимости в параграфах, включающих параметры для одного параметра:

х -> х + 1. 

Более сложные блоки кода также возможны. Следующая лямбда принимает один линия параметр и делает некоторую обработку на нем. Обратите внимание, что тип параметра выводится из окружающего контекста:

линия -> { String [] x = pattern.split (line); вернуть нового игрока (Integer.parseInt (x [0]), x [1], x [2], x [3], Integer.parseInt (x [4])); }

Чистое и краткое кодирование

Использование лямбда-выражений помогает сделать ваш код чистым и лаконичным. Чтобы помочь в этом, классы Java 8 широко используют лямбды.

Цикл по списку или набору

Коллекционные классы, такие как Список, Установлен, Очередь, и такие внедряют Iterable интерфейс, который делает зацикливание элементов намного проще.

Объявите список имен.

Список names = Arrays.asList («Джо», «Джек», «Джеймс», «Альберт»); 

Перебрать список без лямбды:

for (имя строки: имена) {System.out.println (имя); }

Используя лямбду, вышеприведенный цикл можно записать так:

names.forEach (name -> System.out.println (name)); 

С помощью ссылок на методы Java 8 вышеприведенное можно записать еще более кратко, как:

names.forEach (System.out:: println); 

Зацикливание на карте

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

Сначала определите карту:

карта map = new HashMap <> (); map.put («Атланта, Джорджия», 110); map.put («Остин, Техас», 115); map.put («Балтимор, Мэриленд», 105); map.put («Бирмингем, Алабама», 99); map.put («Бостон, Массачусетс», 98); 

Вы можете зациклить эту карту традиционным способом:

для (Карта. запись e: map.entrySet ()) {System.out.println (e.getKey () + "=>" + e.getValue ()); }

Вот как вы можете сделать то же самое быстро и кратко, используя лямбды:

map.forEach ((k, v) -> System.out.println (k + "=>" + v)); 

Функциональные интерфейсы

Каков тип возврата лямбда-выражения? Другими словами, какой тип Икс в следующем утверждении?

Х х = а -> а + 1; 

Тип возврата лямбда-выражения функциональный интерфейс - интерфейс с одним абстрактным методом. Вы можете назначить лямбда-выражение интерфейсу с помощью совместимого абстрактного метода. Некоторые примеры ниже.

Создание многопоточной задачи

Рассмотрите возможность создания задачи для исполнение в отдельном потоке 4 Методы написания многопоточного кода на JavaВ этой статье мы сравниваем несколько вариантов написания многопоточного кода на Java, чтобы вы могли лучше оценить, какой вариант использовать для вашего следующего проекта Java. Читать далее - Вы должны определить задачу как Runnable интерфейс и реализовать запустить() метод. Вот Runnable это функциональный интерфейс

Класс MyTask реализует Runnable {... public void run () {// реализуем вашу задачу здесь System.out.println («Запуск в отдельном потоке.»); }... }

Затем вы можете создать экземпляр Мое задание класс и использовать его, чтобы начать новый поток выполнения.

MyTask task = new MyTask (); Тема потока = новая тема (задача); Thread.start (); 

Используя лямбду, процесс создания Runnable становится намного проще. Приведенное выше определение задачи можно переписать так:

Runnable task = () -> System.out.println («Запущен в отдельном потоке.»); 

Или даже:

Thread thread = new Thread (() -> System.out.println («Выполняется в отдельном потоке.»)); Thread.start (); 

Сравнение с использованием компаратора

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

Вот лямбда-выражение, создающее компаратор используется для сравнения строк без учета регистра.

компаратор cmp = (x, y) -> x.compareToIgnoreCase (y); 

Однажды экземпляр компаратор Создан функциональный интерфейс, его можно использовать повторно по мере необходимости.

Здесь мы сортируем список строк в порядке возрастания.

Список names = Arrays.asList («Джо», «Джек», «Джеймс», «Альберт»); Collections.sort (имена, cmp); names.forEach (System.out:: println); // печатает. Альберт. Джек. Джеймс. Джо. 

Список выше отсортирован по месту. Теперь мы можем искать его, используя BinarySearch () метод следующим образом:

System.out.println ("search (Joe):" + Collections.binarySearch (names, "Joe", cmp)); # печатает. поиск (Джо): 3. 

Вычислять максимум и минимум из списка также легко с помощью лямбд.

Определите некоторые данные:

Список temps = Arrays.asList (110, 115, 105, 99, 98, 54, 109, 84, 81, 66, 72, 135, 115, 75, 82, 90, 88); 

Используйте лямбда-выражение, чтобы определить компаратор:

компаратор cmpTemp = (x, y) -> Integer.compare (x, y); 

И выведите максимум и минимум:

System.out.println («Макс / Мин»); System.out.println (Collections.max (temps, cmpTemp) + "/" + Collections.min (temps, cmpTemp)); 

Использование в программировании GUI

Лямбда-выражения также чрезвычайно полезны в программировании GUI для реализации обработчиков событий. Вот пример использования обработчика нажатия кнопки.

Кнопка JButton = новая кнопка JButton («Нажмите меня»); button.addActionListener (e -> System.out.println («Кнопка нажата!»)); 

И это был быстрый взгляд на использование лямбд в Java 8.

Лямбды облегчили вашу жизнь с Java 8? Пожалуйста, объясните в комментариях ниже.