Java android получить список

Содержание
  1. Как получить список приложений, установленных пользователем на Android-устройстве?
  2. 9 ответов
  3. Разработка под Android. Немного о быстрой работе со списками
  4. Вступление
  5. Давайте мыслить логично и с самого начала
  6. Создаем список
  7. JetPack
  8. Список литературы/медиа
  9. Интерфейс Java List Collection с примерами
  10. List против Set
  11. Реализации
  12. Как вставить элементы
  13. Как вставить нулевые значения
  14. Как вставить элементы по определенному индексу
  15. Как вставить все элементы из одного списка в другой
  16. Как получить элементы
  17. Как найти элементы
  18. Как найти последнее вхождение элемента в списке
  19. Проверка, содержится ли элемент
  20. Как удалить элементы
  21. Как удалить все элементы
  22. Как сохранить все элементы из одного списка в другом
  23. Размер
  24. Подсписок
  25. Как преобразовать в набор
  26. Как преобразовать в массив
  27. Как конвертировать массив в список
  28. Общие
  29. Как сортировать
  30. Сортировка сопоставимых объектов
  31. Сортировка с помощью компаратора
  32. Итерация
  33. Итерация с использованием итератора
  34. Итерация с использованием цикла For-Each
  35. Итерация с помощью цикла For
  36. С использованием API Java Stream

Как получить список приложений, установленных пользователем на Android-устройстве?

В настоящий момент я использую следующий фрагмент кода:

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

9 ответов

Зелимир ответил правильно. Но в некоторых случаях он не предоставит вам все установленные сторонние приложения. ApplicationInfo также имеет флаг FLAG_UPDATED_SYSTEM_APP , который установлен

Если это приложение было установлено как обновление встроенного системного приложения

На моем смартфоне такие приложения включают Amazone Kindle, Adobe Reader, Slacker Radio и другие. Эти приложения не поставлялись с телефоном и были установлены из Google Play Store. Таким образом, их можно рассматривать как сторонние приложения.

Так что вы также можете проверить флаг FLAG_UPDATED_SYSTEM_APP .

Если я сделаю pkgAppsList.get (0), он вернет объект ResolveInfo. Как мне получить такую ​​информацию, как значок и имя пакета?

Просто сделай это:

Класс Android PackageManager используется для получения информации о пакетах приложений, которые в настоящее время установлены на устройстве. Вы можете получить экземпляр класса PackageManager, вызвав getPackageManager (). PackageManager предоставляет методы для запроса и управления установленными пакетами и соответствующими разрешениями и т. Д. В этом примере Android мы получаем список установленных приложений в Android.

PackageManager packageManager = getPackageManager (); Список list = packageManager.getInstalledApplications (PackageManager.GET_META_DATA)

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

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

Отвечая на этот вопрос для Android 11 / API 30

context.getPackageManager().getInstalledApplications(PackageManager.GET_META_DATA); Приведенный выше код возвращает список системных приложений, поскольку пользовательские приложения не отображаются по умолчанию, вам необходимо добавить разрешение ниже в манифест, чтобы получить список пользовательских приложений.

Если вы хотите узнать, как это сделать в Kotlin, это показано ниже, хотя, как упоминалось ранее Ketan sangle, вам нужно будет добавить в свой файл AndroidManifest.xml.

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

Источник

Разработка под Android. Немного о быстрой работе со списками

Всем привет! Мои посты — желание помочь в работе с какими-то элементами Android. Если вы разработчик, который еще не сформировал для себя алгоритм для построения списков — вам может оказаться полезным почитать этот материал. В основном, я бы хотел предлагать готовые решения для разработки, раскрывая в ходе повествования какие-то мысли о том, как я до них докатился к этому пришел.

  • формируем несколько базовых классов и интерфейсов для работы с RecyclerView и RecyclerView.Adapter
  • подключим одну библиотеку из Android Jetpack (по желанию, сначала без нее)
  • для еще более быстрой разработки — вариант темплейта в конце статьи 😉

Вступление

Ну что ж! Все уже забыли про ListView и благополучно пишут на RecyclerView(Rv). Те времена, когда мы реализовывали сами паттерн ViewHolder, канули в небытие. Rv предоставляет нам набор готовых классов для реализации списков и достаточно большой выбор LayoutManager’ов для их отображения. По сути, глядя на множество экранов, списком можно представить большинство из них — именно благодаря возможности для каждого элемента реализовать свой ViewHolder. Более подробно историю развития нам рассказали на Google I/O.

Но, всегда есть пара «но». Стандартные ответы на Stackoverflow подсказывают общие решения, которые приводят к копипасте, особенно в месте реализации Adapter’a.

На данный момент, Rv уже три года. Инфы по нему туча, и много библиотек с готовыми решениями, но что делать, если вам не нужен весь функционал, или если вы залазите поглядеть на чужой код — и видите там Древний Ужас не то, что хотели бы видеть, или не то что вообще себе представляли? За эти три года Android наконец-таки официально принял к себе Kotlin = улучшилась читаемость кода, по Rv вышло немало интересных статей, которые в полной мере раскрывают его возможности.

Цель этой — собрать из лучших практик свой велосипед основу, каркас по работе со списками для новых приложений. Этот каркас можно дополнять логикой от приложения к приложению, используя то, что вам необходимо, и отбрасывая лишнее. Я считаю такой подход намного лучше чужой библиотеки — в своих классах вы имеете возможность разобраться с тем, как все работает, и проконтролировать кейсы в которых нуждаетесь, не завязываясь на чужом решении.

Давайте мыслить логично и с самого начала

Решать то, что должен делать компонент, будет интерфейс, а не класс, но конкретную логику реализации в конце замкнем на классе, который будет этот интерфейс имплементировать и реализовывать. Но, если получится так, что при реализации интерфейса образуется копипаста — мы можем спрятать ее за абстрактным классом, а после него — класс, который наследуется от абстрактного. Я покажу свою реализацию базовых интерфейсов, но моя цель состоит в том, чтобы разработчик просто попробовал думать в этом же направлении. Еще раз — план такой: Набор интерфейсов -> абстрактный класс, забирающий копипасту (если это нужно) -> и уже конкретный класс с уникальным кодом. Реализацию интерфейсов Вы можете выполнить по другому.

Читайте также:  Android tv box streaming media player

Что может делать со списком адаптер? Ответ на этот вопрос легче всего получить, когда смотришь на какой то пример. Можно заглянуть в RecyclerView.Adapter, вы найдете пару подсказок. Если же немного подумать, то можно представить примерно такие методы:

Обратите внимание на дженерик T. В общем случае, адаптер работает с любым объектом списка (item), поэтому здесь нет уточнения — мы еще не выбрали наш подход. А в этой статье их будет как минимум два, первый интерфейс выглядит так:

Ну да, кажется логичным — мы же говорим об элементе списка, значит у каждого элемента должен быть какой-то лейаут, а сослаться на него можно с помощью layoutId. Больше ничего начинающему разработчику скорее всего не понадобится, если конечно не брать более продвинутые подходы. Если же у вас хватает опыта в разработке, можно конечно сделать делегат или обертку, но стоит ли оно того при небольшом проекте — и еще меньшем опыте разработки? Все мои ссылки куда то в ютуб очень полезны, если у вас сейчас нет времени — просто запомните их и читайте дальше, потому что здесь подход попроще — я считаю что при стандартной работе с Rv, судя по официальной документации, того что предлагается выше — не подразумевается.

Пора объединить наш IBaseListAdapter с интерфейсами, и следующий класс будет абстрактным:

*Примечание: Обратите внимание на переопределенную функцию getItemViewType(position: Int). Нам нужен некий интовый ключ, по которому Rv поймет, какой ViewHolder нам подходит. Для этого отлично пригодится val layoutId у нашей item, т.к. Андроид каждый раз услуживо делает id лейаутов уникальными, и все значения больше нуля — этим мы и воспользуемся далее, «надувая» itemView для наших вьюхолдеров в методе inflateByViewType() (следующая строка).

Создаем список

Возьмем для примера экран настроек. Андроид предлагает нам свой вариант, но что если по дизайну понадобится что-то более изощренное? Я предпочитаю наполнять этот экран как список. Тут будет приведен такой кейс:

Мы видим два разных элемента списка, значит SimpleListAdapter и Rv тут прекрасно подойдут!

Приступим! Можно начать с верстки лейаутов для item’ов:

Затем, определяем сами классы, внутрь которых мы хотим передать значения, которые взаимодействуют со списком: первый — это заголовок и какое-либо значение, пришедшее извне (у нас будет заглушка, о запросах в другой раз), второй — это заголовок и boolean переменная, по которому мы должны выполнить действие. Чтобы различить Switch элементы, подойдут id сущностей с сервера, если же их нет — мы можем создать их сами при инициализации.

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

Ну и самая интересная часть — конкретная реализация SimpleListAdapter’a:

*Примечание: Не забывайте про то, что под капотом метода inflateByViewType(context, viewType, parent): viewType = layoutId.

Все составляющие готовы! Теперь, остается код Активити и можно запускать программу:

В итоге, при построении списка, вся работа сводится к следующему:

1. Вычисление количества разных лейаутов для итемов

2. Подобрать им названия. Я пользуюсь правилом: SomethingItem.kt, item_something.xml, SomethingViewHolder.kt

3. Пишем к этим классам адаптер. В принципе, если вы не претендуете на оптимизацию, то хватит одного общего адаптера. Но в больших проектах я бы все же сделал несколько, по экранам, потому что в первом случае неизбежно разрастается метод onBindViewHolder() (страдает читаемость кода) в вашем адаптере (в нашем случае это SettingsListAdapter) + программе придется каждый раз, для каждого итема, пробегаться по этому методу + по методу onCreateViewHolder()

4. Запускаем код и радуемся!

JetPack

До этого момента мы применяли стандартный подход привязки данных из Item.kt — к нашему item_layout.xml. Но мы можем унифицировать метод onBindViewHolder(), оставить его минимальным, а логику перенести в Item и лейаут.

Зайдем на официальную страницу Android JetPack:

Обратим внимание на первую вкладку в разделе Architecture. Android Databinding — очень обширная тема, я бы хотел поговорить об ней более подробно в других статьях, но сейчас воспользуемся только в рамках текущей — мы сделаем нашу Item.ktvariable для item.xml (или можете назвать ее вьюмоделью для лейаута).

На момент написания статьи, Databinding можно было подключить вот так:

Пройдемся заново по базовым классам. Интерфейс для итема дополняет предыдущий:

Также, мы расширим наш ViewHolder, потому связались с датабайдингом. Будем передавать в него ViewDataBinding, после чего благополучно забудем о создании лейаута и привязке данных

Такой же подход используется здесь, но на котлине это выглядит намного короче, не правда ли? =)

Обратите внимание в целом на методы onCreateViewHolder(), onBindViewHolder(). Задумка в том, чтобы они больше не разрастались. Итого, вы получаете один адаптер для любого экрана, с любыми элементами списка.

Здесь становится видно, куда делась логика метода onBindViewHolder(). Ее взял на себя Android Databinding — теперь любой наш лейаут подкреплен своей вьюмоделью, и она спокойно обработает всю логику нажатий, анимаций, запросов и прочего. Что вы сами придумаете. В этом хорошо помогут Binding Adapters — позволив связать вью с данными любого рода. также, связь возможно улучшить благодаря двустороннему датабайдингу. Наверное он промелькнет в какой-нибудь из следующих статей, в данном примере можно сделать все проще. Нам достаточно одного байндинг адаптера:

После этого, связываем наши значения переменных с нашими Item внутри xml:

*Примечание: Вполне по справедливым причинам, кое-кому может показаться, что мы пишем много больше кода в xml — но это вопрос знаний библиотеки Android Databinding. Она дополняет лейаут, быстро читается и в принципе по большей части убирает именно бойлерплейт. Я думаю, Google собирается хорошо развить эту библиотеку, раз она находится первой во вкладке Architecture, в Android Jetpack. Попробуйте в паре проектов сменить MVP на MVVM — и многие могут быть приятно удивлены.

Ну что ж. А, код в SettingsActivity:

… не изменился, разве что поменялся адаптер! =) Но чтобы не прыгать по статье:

Мы получили алгоритм построения списков и инструменты для работы с ними. В моем случае (почти всегда использую Databinding) вся подготовка сводится к инициализации базовых классов по папкам, верстке итемов в .xml а затем привязке к переменным в .kt.

Читайте также:  Java jdk для андроид

Ускоряем разработку
Для более быстрой работы, я воспользовался шаблонами от Apache для Android Studio — и написал свои темплейты с небольшой демонстрацией, как это все работает. Очень надеюсь, что кому-то пригодится. Обратите внимание, что при работе вызывать темплейт нужно из корневой папки проекта — это сделано потому что параметр applicationId проекта может вам наврать, если вы поменяли его в Gradle. А вот packageName так просто не проведешь, чем я и воспользовался. Доступным языком про шаблонизацию можно почитать по ссылкам ниже

Список литературы/медиа

1. Modern Android development: Android Jetpack, Kotlin, and more (Google I/O 2018, 40 m.) — краткий гайд на то, что сегодня в моде, отсюда также в общих чертах станет понятно как развивался RecyclerView;

2. Droidcon NYC 2016 — Radical RecyclerView, 36 m. — подробный доклад о RecyclerView от Lisa Wray;

5. Android IDE Template Format, Тотальная шаблонизация, мануал FreeMarker — удобный подход, который в рамках этой статьи поможет быстро создавать нужные файлы по работе со списками

Источник

Интерфейс Java List Collection с примерами

Интерфейс Java List, java.util.List, представляет упорядоченную последовательность объектов. Элементы, содержащиеся в списке Java, могут быть вставлены, повторены и удалены в соответствии с порядком их появления в нем. Порядок элементов – вот почему эта структура данных называется списком.

Каждый элемент имеет индекс: первый элемент – 0, второй – 1 и т. д. Индекс означает «сколько элементов находится в начале». Таким образом, первый элемент находится на расстоянии 0 элементов от начала списка, потому что он находится в начале.

Вы можете добавить любой объект в список. Если он не типизирован с использованием Java Generics, то вы можете даже смешивать объекты разных типов (классов) в одном и том же списке. Однако на практике это происходит не часто.

Интерфейс List является стандартным интерфейсом и подтипом интерфейса Collection, что означает, что List наследуется от Collection.

List против Set

Интерфейсы List и Set очень похожи в том, что они оба представляют коллекцию элементов. Тем не менее, есть некоторые существенные различия, отраженные в методах, предлагаемых интерфейсами:

  1. Один и тот же элемент может встречаться в списке более одного раза. Это отличается от набора, где каждый элемент может встречаться только один раз.
  2. Элементы в List имеют порядок, и могут повторяться в этом порядке. Набор не дает никаких обещаний относительно порядка элементов, хранящихся внутри.

Реализации

Будучи подтипом Collection, все методы в интерфейсе Collection также доступны в интерфейсе List.

Поскольку List – это интерфейс, вам нужно создать конкретную реализацию интерфейса, чтобы использовать его, либо выбрать между следующими в API коллекций:

Также есть параллельные реализации в пакете java.util.concurrent.

Вот несколько примеров того, как создать экземпляр List:

Как вставить элементы

Вы вставляете элементы (объекты) в список, используя его метод add():

Первые три вызова add() добавляют экземпляр String в конец списка.

Как вставить нулевые значения

Как вставить элементы по определенному индексу

Можно вставить элемент в список по определенному индексу. Интерфейс List имеет версию метода add(), которая принимает индекс в качестве первого параметра, и элемент для вставки в качестве второго:

Если список уже содержит элементы, они теперь будут перемещены дальше во внутренней последовательности списка. Элемент, который имел индекс 0 до того, как новый элемент был вставлен в индекс 0, будет перемещен в индекс 1 и т. д.

Как вставить все элементы из одного списка в другой

Сделать это можно с помощью метода List addAll(). Результирующий список представляет собой объединение двух. Вот пример:

В этом примере все элементы из listSource добавляются в listDest. Метод addAll() принимает коллекцию в качестве параметра, поэтому вы можете передать в качестве параметра список или набор. Другими словами, можете добавить все элементы из списка или набора с помощью addAll().

Как получить элементы

Для этого используется индекс элементов, а также метод get(int index):

Также возможно итерировать элементы списка в том порядке, в котором они хранятся внутри.

Как найти элементы

Используется один из этих двух методов:

Метод indexOf() находит индекс первого вхождения в списке заданного элемента:

Запуск этого кода приведет к следующему выводу:

Как найти последнее вхождение элемента в списке

Метод lastIndexOf() находит индекс последнего вхождения в списке данного элемента:

Выходные данные, напечатанные при запуске приведенного выше примера, будут следующими:

Элемент 1 элемент встречается 2 раза в списке. Индекс последнего появления равен 2.

Проверка, содержится ли элемент

Используется метод List contains():

Результатом выполнения этого примера будет:

… потому что список действительно содержит элемент.

Чтобы определить, содержит ли List этот элемент, List будет внутренне выполнять итерации своих элементов и сравнивать каждый с объектом, переданным в качестве параметра. Для сравнения используется метод равенства.

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

Очевидно, что если входной параметр для contains() имеет значение null, метод contains() не будет использовать метод equals() для сравнения с каждым элементом, а вместо этого использует оператор ==.

Как удалить элементы

Вы можете удалить элементы с помощью этих двух методов:

  • remove(Object element);
  • remove(int index).

remove(Object element) удаляет этот элемент в списке, если он присутствует. Все последующие элементы затем перемещаются вверх по списку. Таким образом, их индекс уменьшается на 1. Вот пример:

Этот пример сначала добавляет элемент в список, а затем снова удаляет его.

Метод remove(int index) удаляет элемент по указанному индексу. Все последующие элементы в списке затем перемещаются вверх. Таким образом, их индекс уменьшается на 1. Вот пример:

После запуска этого примера кода список будет содержать элементы 1 и 2 элемента Java String с индексами 0 и 1. Первый элемент (элемент 0) был удален из списка.

Как удалить все элементы

Интерфейс List содержит метод clear(), который удаляет все элементы из списка при вызове. Также называется очисткой списка. Вот простой пример:

Сначала создается новый список. Во-вторых, два элемента добавляются в список. В-третьих, вызывается метод clear(). После вызова метода clear() список будет полностью пустым.

Как сохранить все элементы из одного списка в другом

Интерфейс Java List имеет метод retainAll(), который способен сохранять все элементы из одного списка, которые также присутствуют в другом списке. Другими словами, метод retain() удаляет все элементы из целевого списка, которые не найдены в другом списке. Полученный список является пересечением двух списков. Вот Java-пример вызова метода List retainAll():

  • Первые два списка созданы.
  • 3 элемента добавляются в list, а 3 элемента в otherList.
  • Метод retainAll() вызывается, передавая otherList в качестве параметра. После того, как list.retainAll(otherList) завершит выполнение, список будет содержать только те элементы, которые присутствовали как в list, так и otherList до вызова retainAll(). Более конкретно, это element1 и element3.
Читайте также:  Кеш кот для андроида

Размер

Вы можете получить количество элементов, вызвав метод size():

Подсписок

Интерфейс List имеет метод subList(), который может создавать новый List с подмножеством элементов из исходного List.

Метод subList() принимает 2 параметра:

  1. Начальный индекс – это индекс первого элемента из исходного списка для включения в подсписок.
  2. Конечный индекс является последним индексом подсписка, но элемент в последнем индексе не включается в подсписок.

Это похоже на то, как работает метод подстроки Java String. Вот пример:

После выполнения инструкции list.subList(1,3) подсписок будет содержать элементы с индексами 1 и 2. Помните, что исходный список содержит 4 элемента с индексами от 0 до 3. Вызов list.subList(1,3) будет включить индекс 1, но исключить индекс 3, тем самым сохраняя элементы с индексами 1 и 2.

Как преобразовать в набор

Вы можете преобразовать в набор, создав новый набор и добавив в него все элементы из списка. При этом удалятся все дубликаты. Таким образом, результирующий набор будет содержать все элементы списка, но только один раз. Вот пример:

Обратите внимание, что список содержит элемент String 3 два раза. Набор будет содержать эту строку только один раз. Таким образом, результирующий набор будет содержать элемент Strings 1, элемент 2 и элемент 3.

Как преобразовать в массив

Вы можете выполнить это с помощью метода List toArray():

Также возможно преобразовать в массив определенного типа:

Обратите внимание, что даже если мы передадим массив String размером 0 в toArray(), в возвращенном массиве будут все элементы списка. Он будет иметь то же количество элементов, что и список.

Как конвертировать массив в список

Это метод Arrays.asList(), который преобразует массив в список.

Общие

По умолчанию вы можете поместить любой объект в список, но из Java 5 Generics позволяет ограничить типы объектов, которые вы можете вставить. Вот пример:

Этот список теперь может содержать только экземпляры MyObject. Затем вы можете получить доступ к элементам и выполнить итерацию без их приведения:

Как сортировать

Вы можете отсортировать с помощью метода Collections sort().

Сортировка сопоставимых объектов

Если список содержит объекты, которые реализуют интерфейс Comparable(java.lang.Comparable), то эти объекты могут сравнивать себя друг с другом. В этом случае вы можете отсортировать следующим образом:

Класс Java String реализует интерфейс Comparable, вы можете сортировать их в естественном порядке, используя метод Collections sort().

Сортировка с помощью компаратора

Если объекты в списке не реализуют интерфейс Comparable или если вы хотите отсортировать объекты в другом порядке, чем их реализация compare(), вам необходимо использовать реализацию Comparator(java.util.Comparator). Вот пример сортировки списка объектов Car с использованием Comparator.

Первый класс автомобилей:

Вот код, который сортирует список вышеуказанных объектов Car:

Обратите внимание на реализацию Comparator в приведенном выше примере. Сравнивается только поле бренда объектов Car. Можно создать другую реализацию, которая сравнивает номерные знаки или даже количество дверей в автомобилях.

Также обратите внимание, что возможно реализовать Comparator, используя Lambda. Вот пример, который сортирует объекты List of Car с использованием трех различных лямбда-реализаций интерфейса Comparator, каждая из которых сравнивает экземпляры Car по своему полю:

Итерация

Вы можете выполнить итерацию несколькими способами. Три наиболее распространенных:

  • Использование итератора.
  • Использование цикла for-each.
  • Использование цикла for.
  • Использование API Java Stream.

Я объясню каждый из этих методов итерации списка Java в следующих разделах.

Итерация с использованием итератора

Вы получаете Iterator, вызывая метод iterator() интерфейса List.

Получив Iterator, вы можете продолжать вызывать его метод hasNext(), пока он не вернет false. Вызов hasNext() выполняется внутри цикла while.

Внутри цикла while вы вызываете метод Iterator next() интерфейса Iterator для получения следующего элемента, на который указывает Iterator.

Если список напечатан с использованием Java Generics, вы можете сохранить некоторые объекты внутри цикла while. Вот пример:

Итерация с использованием цикла For-Each

Второй способ – использовать цикл for, добавленный в Java 5 (также называемый циклом «для каждого»):

Цикл for выполняется один раз для каждого элемента списка. Внутри него каждый элемент, в свою очередь, связан с переменной obj.

Если список напечатан (List), вы можете изменить тип переменной внутри цикла:

Обратите внимание, список набирается как String. Поэтому вы можете установить тип переменной внутри цикла для String.

Итерация с помощью цикла For

Цикл for создает переменную int и инициализирует ее равной 0. Затем он зацикливается до тех пор, пока int i меньше размера списка. Для каждой итерации переменная увеличивается.

Внутри цикла for пример обращается к элементам List с помощью метода get(), передавая переменную i в качестве параметра.

Опять же, если список набирается с использованием Java Generics, например, для String, то вы можете использовать универсальный тип List в качестве типа для локальной переменной, которая назначается каждому элементу List в ходе итерации:

Обратите внимание, что тип локальной переменной внутри цикла for теперь String. Поскольку список обычно типизируется как String, он может содержать только объекты String. Следовательно, компилятор знает, что только метод String может быть возвращен из метода get(). Поэтому вам не нужно приводить элемент, возвращенный get(), в String.

С использованием API Java Stream

Для итерации вы должны сначала получить поток из списка. Это выполняется путем вызова метода List stream(). Вот пример получения потока из списка:

Последняя строка этого примера вызывает метод List stream() для получения потока, представляющего элементы списка.

Как только вы получили поток, можете выполнить итерацию потока, вызвав его метод forEach():

Вызов метода forEach() заставит Stream выполнить внутреннюю итерацию всех элементов потока и вызвать получателя, переданного в качестве параметра методу forEach() для каждого элемента в потоке.

Источник

Оцените статью