JavaStart
937 subscribers
879 photos
26 videos
589 links
Учи Java вместе с нами!
Наша платформа с курсом - https://javastart.tech
Ютуб с обучающими видео - https://www.youtube.com/@javastart_tech
Download Telegram
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
Stream API в Java. Часть 5.

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

Допустим, у нас есть коллекция состоящая из строк:

List<String> strings = Arrays.asList("Highload", "High", "Load", "Highload").

Применим к ней разные методы.

1) Посчитаем, сколько раз объект "High" встречается в коллекции:

strings.stream().filter("High"::equals).count()
// 1

equals – это метод, который есть у каждого объекта типа String.

2) А теперь посмотрим, какой элемент в коллекции находится на первом месте. Если мы получили пустую коллекцию, то пусть возвращается 0:

strings.stream().findFirst().orElse("0")
// Highload

3) Благодаря методам .filter(условие) и .findFirst() можно находить элементы, равные заданным в условии:

strings.stream().filter("Load"::equals).findFirst().get()
// Load

4) С помощью метода .skip(число long) можно искать элементы по порядку. Например, пропустить первый и вывести второй:

strings.stream().skip(1).findFirst().get()
// High

5) Можно также использовать методы .skip(число long) и .limit(число long), чтобы явно задавать, сколько элементов нужно пропустить, а сколько — вернуть. Полученные значения соберем в массив:

strings.stream().skip(1).limit(2).toArray()
// [High, Load]

Рассмотрим еще примеры в следующих постах.

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

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
This media is not supported in your browser
VIEW IN TELEGRAM
Обслуживание сервера в сложных условиях)

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой будет результат работы следующей программы, используя Stream API Java?

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
👆Объяснение к задаче выше:

Сначала создаётся список целых чисел из массива 1, 2, 3, 4, 5.

Затем этот список превращается в поток данных (Stream).

Далее выполняется фильтрация, оставляя только чётные числа (остаток при делении на 2 равен нулю).

Затем происходит преобразование каждого элемента потока в примитивный тип int, используя метод mapToInt().

Наконец, выполняется операция суммирования всех элементов потока с помощью метода sum().

В результате мы получаем сумму чётных чисел в списке, равную 6.

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

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

В Stream API Java пока мы не вызвали терминальный метод, ничего не происходит. Все потому, что конвейерные методы ленятся (они lazy). Это значит, что они обрабатывают данные и ждут команды, чтобы передать их терминальному методу.

Перечислим часто встречающиеся Конвейерные (или Промежуточные) операторы стримов.

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

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

После того как мы поработали с нашим стримом (или потоком) каких-либо элементов (стрим списка любых кастомных моделей Java, например, класс Car или просто список строк или объектов Integer) нужно завершить эту работу с помощью терминального оператора.

Перечислим часто встречающиеся Терминальные операторы стримов в Java.

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

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Краткий гайд для прохождения интервью на любую позицию

JavaStart. Подписаться
Please open Telegram to view this post
VIEW IN TELEGRAM