Please open Telegram to view this post
VIEW IN TELEGRAM
Лямбды, анонимные классы и обычные классы в Java. Часть 4.
Как уже было написано, лямбда-выражения могут заменить анонимные классы, которые реализуют функциональные интерфейсы, но в остальных случаях анонимные классы не теряют актуальности.
Если одно и то же лямбда-выражение (или анонимный класс) используется в нескольких случаях, то появляется смысл сделать его членом класса или объекта, или и вовсе написать полноценный класс, реализующий необходимый интерфейс.
Но в большинстве случаев, там где можно применять лямбда-выражения, например в Stream (поговорим далее), Optional (поговорим далее) или CompletableFuture (работа с асинхронностью), логичнее применять именно лямбды.
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Как уже было написано, лямбда-выражения могут заменить анонимные классы, которые реализуют функциональные интерфейсы, но в остальных случаях анонимные классы не теряют актуальности.
Если одно и то же лямбда-выражение (или анонимный класс) используется в нескольких случаях, то появляется смысл сделать его членом класса или объекта, или и вовсе написать полноценный класс, реализующий необходимый интерфейс.
Но в большинстве случаев, там где можно применять лямбда-выражения, например в Stream (поговорим далее), Optional (поговорим далее) или CompletableFuture (работа с асинхронностью), логичнее применять именно лямбды.
Please open Telegram to view this post
VIEW IN TELEGRAM
Каково назначение ключевого слова "super" в Java?
Anonymous Quiz
5%
Для ссылки на текущий объект
3%
Для создания нескольких экземпляров класса
90%
Для вызова конструктора или методов суперкласса
1%
Для сокрытия данных и методов внутри класса
2%
Посмотреть ответ
Please open Telegram to view this post
VIEW IN TELEGRAM
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. Подписаться
Поговорим об одном из самых важных разделов Java, о котором обязательно спрашивают джунов или стажеров на собеседовании - это Stream API.
Stream API называют фреймворк для работы со структурами данных в функциональном стиле. Появился в Java 8 вместе с лямбда-выражениями, а это было аж в 2014 году.
Stream (поток) API (описание способов, которыми одна компьютерная программа может взаимодействовать с другой программой) — это по своей сути поток данных.
С появлением в Java 8 Stream API позволило программистам писать существенно короче то, что раньше занимало много строк кода, а именно — упростить работу с наборами данных, в частности, упростить операции фильтрации, сортировки и другие манипуляции с данными. Например, с коллекциями (List, Map, array и др.).
C чего, собственно, начать?
С создания экземпляра Stream, который опирается на нужную нам коллекцию, откуда соответственно будут браться данные, и метод .stream().
А далее со стримом можно делать все необходимое – об этом в след постах.
Please open Telegram to view this post
VIEW IN TELEGRAM
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. Подписаться
Давайте рассмотрим применение 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)
Рассмотрим их далее в постах.
Кстати, для лучшей читабельности методы стрима принято писать с новой строки. Но это не обязательно.
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
Please open Telegram to view this post
VIEW IN TELEGRAM
Какой символ используется, чтобы разделить ключ и значение в JSON?
Anonymous Quiz
65%
:
10%
;
11%
,
9%
=
5%
Посмотреть ответ
Stream API в Java. Часть 3.
Возможные способы создания Stream:
– Пустой стрим: Stream.empty()
– Стрим из List: list.stream()
– Стрим из Map: map.entrySet().stream()
– Стрим из массива: Arrays.stream(array)
– Стрим из указанных элементов (в данном случае строк – в ковычках): Stream.of("1", "2", "3")
👩💻 Наш практический курс Java–разработчика
✅ JavaStart. Подписаться
Возможные способы создания Stream:
– Пустой стрим: Stream.empty()
– Стрим из List: list.stream()
– Стрим из Map: map.entrySet().stream()
– Стрим из массива: Arrays.stream(array)
– Стрим из указанных элементов (в данном случае строк – в ковычках): Stream.of("1", "2", "3")
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Какое предназначение у команды WHERE в SQL?
Anonymous Quiz
27%
Указывает столбцы, которые необходимо извлечь
1%
Упорядочивает результаты в порядке возрастания или убывания
71%
Фильтрует строки, возвращаемые оператором SELECT
0%
Создаёт новую таблицу
2%
Посмотреть ответ
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. Подписаться
По сути методы класса Stream называются операторами.
Вопрос о видах Stream операторов часто всплывает на собеседованиях Java джунам или стажерам. Чтобы понимать, насколько вы знаете теорию.
Операторы можно разделить на две группы:
– Промежуточные (“intermediate”, ещё называют “lazy”) — обрабатывают поступающие элементы и возвращают стрим. Промежуточных операторов в цепочке обработки элементов может быть много. В некоторых источниках Промежуточные операторы называются Конвейерными.
– Терминальные (“terminal”, ещё называют “eager”) — обрабатывают элементы и завершают работу стрима, так что терминальный оператор в цепочке может быть только один.
Что происходит на первой картинке?
– Создаём список list;
– Заполняем его тестовыми данными;
– Создаем стрим;
– Метод .filter() (фильтр) — промежуточный оператор, переменная x приравнивается к одному элементу коллекции для перебора (как при for each) и после -> мы указываем как фильтруется наша коллекция и так как это промежуточный оператор, отфильтрованная коллекция идёт дальше в метод .forEach(), который в свою очередь, является терминальным (конечным) аналогом перебора for each.
Выражение System.out::println сокращенно от:
x -> System.out.println(x),
которое в свою очередь, проходит по всем элементам переданной ему коллекции и выводит её.
– На выходе получаем строку One.
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
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. Подписаться
Давайте рассмотрим на практике, на примере несложных задач, как работать с разными методами 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]
Рассмотрим еще примеры в следующих постах.
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