JavaStart
920 subscribers
895 photos
27 videos
603 links
Учи Java вместе с нами!
Наша платформа с курсом - https://javastart.tech
Ютуб с обучающими видео - https://www.youtube.com/@javastart_tech
Download Telegram
Лямбда-выражение в Java. Часть 3.

Применение лямбда-выражений.

Допустим у нас есть задача написать метод, выводящий из полученного списка автомобили, у которых тип кузова (body) — STATION_WAGON и мощность (power) — больше 200 л.с.

Скорее всего, мы напишем что-то вроде того, что на Картинке 1.

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

Но, допустим, у нас появляется задача реализовать ещё один метод, который бы выводил все автомобили, у которых кузов не PICKUP_TRUCK, или метод, который бы сохранял в БД все автомобили с мощностью двигателя более 150 л.с.

В этом случае логично было бы использовать сразу два функциональных интерфейса из  пакета java.util.function:

– java.util.function.Predicate — для фильтрации

и

– java.util.function.Consumer — для действия, применяемого к подходящим объектам.

java.util.function.Predicate декларирует абстрактный метод test(), который принимает объект и возвращает значение типа boolean в зависимости от соответствия переданного объекта требуемым критериям.

java.util.function.Consumer декларирует абстрактный метод accept(), который принимает объект и выполняет над ним требуемые действия.

Метод printCars(List<Car> cars) превратится во что-то похожее на следующий метод, написанный на Картинке 2.

И первоначальную задачу вывести из полученного списка автомобили, у которых тип кузова (body) — STATION_WAGON и мощность (power) — больше 200 л.с. мы решили бы следующим вызовом метода processCars() с использованием лямбда-выражений (Картинка 3).

Или при помощи анонимных классов как на Картинке 4.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍75🔥3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁86💯5
Лямбды, анонимные классы и обычные классы в Java. Часть 4.

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

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

Но в большинстве случаев, там где можно применять лямбда-выражения, например в Stream (поговорим далее), Optional (поговорим далее) или CompletableFuture (работа с асинхронностью), логичнее применять именно лямбды.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
👍3🔥31💯1🤓1👨‍💻1
This media is not supported in your browser
VIEW IN TELEGRAM
4🔥3👍2
Please open Telegram to view this post
VIEW IN TELEGRAM
6😁52
Stream API в Java. Часть 1.

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

Stream API называют фреймворк для работы со структурами данных в функциональном стиле. Появился в Java 8 вместе с лямбда-выражениями, а это было аж в 2014 году.

Stream (поток) API (описание способов, которыми одна компьютерная программа может взаимодействовать с другой программой) — это по своей сути поток данных.

С появлением в Java 8 Stream API позволило программистам писать существенно короче то, что раньше занимало много строк кода, а именно — упростить работу с наборами данных, в частности, упростить операции фильтрации, сортировки и другие манипуляции с данными. Например, с коллекциями (List, Map, array и др.).

C чего, собственно, начать?

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

А далее со стримом можно делать все необходимое – об этом в след постах.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍42
Stream API в Java. Часть 2.

Давайте рассмотрим применение Stream API на самом простом примере, но который можно считать вполне боевым (из коммерческой разработки).

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

Берем сначала все числа меньше 90, прибавляем к каждому числу цифру 10, выводим первые 3 числа из получившегося списка.

На выходе в консоли мы получаем числа 60, 70 и 80.

Пример без потока на Картинке 1.

Обратите внимание, насколько код читабельнее и лаконичнее с применением Stream API на Картинке 2.

Рассмотрим подробнее Картинку 2. Что мы там делаем?

– Создаем стрим (поток) целых чисел из данного списка с помощью метода .stream();

– Фильтруем наш поток чисел методом .filter(условие). Берем только те, которые меньше 90. Переменная x приравнивается к одному элементу коллекции для перебора;

– Прибавляем к каждому полученному в потоке числу цифру 10 с помощью Stream метода .map(операция). Переменная x приравнивается к одному элементу коллекции для перебора;

– Ограничиваем наш конечный поток только 3-мя элементами (числами в нашем случае) с помощью метода .limit(число);

– Печатаем в консоль каждый элемент, который присутствует в конечном потоке. Выражение System.out::println сокращенно от:
x -> System.out.println(x)).

Много интересных методов, которых нам предоставляет фреймворк Stream API)
Рассмотрим их далее в постах.

Кстати, для лучшей читабельности методы стрима принято писать с новой строки. Но это не обязательно.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
👍63👨‍💻3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6👍5💯3
Please open Telegram to view this post
VIEW IN TELEGRAM
😁6👍5💯32
Какой символ используется, чтобы разделить ключ и значение в JSON?
Anonymous Quiz
65%
:
10%
;
11%
,
9%
=
5%
Посмотреть ответ
6👍3👨‍💻1
Stream API в Java. Часть 3.

Возможные способы создания Stream:

– Пустой стрим: Stream.empty()

– Стрим из List: list.stream()

– Стрим из Map: map.entrySet().stream()

– Стрим из массива: Arrays.stream(array)

– Стрим из указанных элементов (в данном случае строк – в ковычках): Stream.of("1", "2", "3")

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
👍73👨‍💻2
Please open Telegram to view this post
VIEW IN TELEGRAM
😁74💯3
Stream API в Java. Часть 4.

По сути методы класса Stream называются операторами.
Вопрос о видах Stream операторов часто всплывает на собеседованиях Java джунам или стажерам. Чтобы понимать, насколько вы знаете теорию.

Операторы можно разделить на две группы:

– Промежуточные (“intermediate”, ещё называют “lazy”) — обрабатывают поступающие элементы и возвращают стрим. Промежуточных операторов в цепочке обработки элементов может быть много. В некоторых источниках Промежуточные операторы называются Конвейерными.

– Терминальные (“terminal”, ещё называют “eager”) — обрабатывают элементы и завершают работу стрима, так что терминальный оператор в цепочке может быть только один.

Что происходит на первой картинке?

– Создаём список list;

– Заполняем его тестовыми данными;

– Создаем стрим;

– Метод .filter() (фильтр) — промежуточный оператор, переменная x приравнивается к одному элементу коллекции для перебора (как при for each) и после -> мы указываем как фильтруется наша коллекция и так как это промежуточный оператор, отфильтрованная коллекция идёт дальше в метод .forEach(), который в свою очередь, является терминальным (конечным) аналогом перебора for each.

Выражение System.out::println сокращенно от:
x -> System.out.println(x),
которое в свою очередь, проходит по всем элементам переданной ему коллекции и выводит её.

– На выходе получаем строку One.

👩‍💻 Наш практический курс Java–разработчика

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
4👍4👨‍💻3