{"id":19514605,"url":"https://github.com/jcoderpaul/javaextended-24","last_synced_at":"2026-06-11T04:31:27.278Z","repository":{"id":175331268,"uuid":"555655584","full_name":"JcoderPaul/JavaExtended-24","owner":"JcoderPaul","description":"Stream API. Section cheat sheet. For memory!","archived":false,"fork":false,"pushed_at":"2022-12-13T09:31:54.000Z","size":115,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-02-25T23:32:53.449Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/JcoderPaul.png","metadata":{"files":{"readme":"ReadMe.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-10-22T02:42:38.000Z","updated_at":"2022-10-22T02:55:03.000Z","dependencies_parsed_at":null,"dependency_job_id":"76837a8a-ebf2-40ae-a316-113dd760ae65","html_url":"https://github.com/JcoderPaul/JavaExtended-24","commit_stats":null,"previous_names":["jcoderpaul/javaextended-24"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/JcoderPaul/JavaExtended-24","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JcoderPaul%2FJavaExtended-24","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JcoderPaul%2FJavaExtended-24/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JcoderPaul%2FJavaExtended-24/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JcoderPaul%2FJavaExtended-24/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/JcoderPaul","download_url":"https://codeload.github.com/JcoderPaul/JavaExtended-24/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/JcoderPaul%2FJavaExtended-24/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":285369038,"owners_count":27159982,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-11-20T02:00:05.334Z","response_time":54,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-10T23:37:00.663Z","updated_at":"2025-11-20T04:03:27.573Z","avatar_url":"https://github.com/JcoderPaul.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"### ******************************* Stream API *******************************\n\nПонятие потока далее - стрим (не Thread).\n\nПоток (стрим) - это ключевая абстрактная концепция для обработки коллекций в Java 8. Он может\nуказывать операции, которые вы хотите выполнить над коллекцией. Стрим может выполнять очень сложные\nоперации, такие как поиск, фильтрация и отображение данных.\n\nИспользование Stream API для управления данными сбора аналогично использованию SQL для выполнения\nзапросов к базе данных. Stream API обеспечивает эффективный и простой в использовании способ обработки\nданных.\n\nСтрим:\n- канал данных, используемый для управления последовательностью элементов, сгенерированных\nисточником данных (коллекция, массив и т. Д.);\n- последовательность набора данных;\n- поток управляемых расчетов и изменений над входными данными;\n\n### !!! Стрим НЕ !!!\n- стрим не хранит элементы;\n- стрим не меняет исходный объект, вместо этого он возвращает новый поток, содержащий требуемый результат;\n- промежуточные операции стрима выполняются с задержкой. Это означает, что промежуточные методы стрима\n  (ленивые - lazy) и ожидают, соответствующего запроса от терминальной операции (которые в свою очередь\n  жадные - eager), т.е. когда результаты будут востребованы.\n\n#### *** Три шага работы потока ***\n\n- Шаг 1 - Создать поток - из источника данных (например: коллекция, массив), получить поток;\n- Шаг 2 - Промежуточная операция - промежуточная цепочка операций для обработки данных из источника данных;\n- Шаг 3 - Завершить работу (терминальная операция) - операция завершения стрима, которая активирует выполнение\n  промежуточную цепочку операций и выдает результат;\n\n### ******************************* Шаг 1 - Создать поток *******************************\n\nИнтерфейс Collection в Java8 был расширен, чтобы обеспечить два метода для получения стримов:\n\n- Поток по умолчанию stream (): возвращает стрим последовательности;\n- Поток по умолчанию parallelStream (): возвращает параллельный стрим;\n\nCоздание стрима из массива и коллекции:\n\n- Статический метод *.stream () для коллекций (List)\n  - Пример: Stream\u003cString\u003e myStream = rainbow.stream();\n- Cтатический метод для массивов Stream (массив T []): возвращает поток\n  - Пример: Arrays.stream(new int[]{2, 4, 5, 1}).forEach(System.out::println);\n\nСоздание стрима из набора значений используя статический метод Stream.of (n...):\n- Синтаксис: public static Stream of (T… values)\n  - Пример #1 : Stream\u003cString\u003e strStream = Stream.of(\"шла\",\"маша\",\"по\", \"шоссе\",\"и\",\"сосала\",\"сушку\");\n  - Пример #2 : Stream\u003cInteger\u003e intStream = Stream.of(1, 2, 3, 4, 5, 6, 7);\n\n(см. пример [Less_24_ch_7_Stream_Concat](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_7_Stream_Concat/src/Less_24_ch_7_Stream_Concat))\n\nСуществует способ создания бесконечного стрима.\nМожно использовать статические методы Stream.iterate () и Stream.generate() для создания бесконечного потока.\n - Синтаксис: public static Stream iterate(final T seed, final UnaryOperator f)\n - Синтаксис: public static Stream generate(Supplier s)\n\n(см. пример [Less_24_ch_18_EndlessStream](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_18_EndlessStream/src/Less_24_ch_18_EndlessStream))\n\n### *********************** Шаг 2 - Промежуточная операция ***********************\n\nНесколько промежуточных операций могут быть соединены в цепочку через символ '.'\nКак уже было сказано выше промежуточные операции не выполняются, до тех пор пока вся цепочка не завершится\nтерминальной операцией. В момент запуска терминальной операции промежуточные операции обрабатывается\nодновременно, что называется «отложенным выполнением».\n\n### *** Скрининг и нарезка ***\n\n- filter (Predicate\u003c? super T\u003e predicate) - получает лямбду на вход, исключает определенные элементы из стрима;\n  (см. пример [Less_24_ch_2_Stream_Filter](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_2_Stream_Filter/src/Less_24_ch_2_Stream_Filter))\n- distinct () -\tудаляет дублирующиеся элементы из стрима;\n  (см. пример [Less_24_ch_2_Stream_Filter](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_2_Stream_Filter/src/Less_24_ch_2_Stream_Filter))\n- limit(long maxSize) - ограничивает стрим сверху, чтобы его элементы не превышали заданное число maxSize;\n  (см. пример [Less_24_ch_15_Stream_Limit](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_15_Stream_Limit/src/Less_24_ch_15_Stream_Limit_Skip) и [Less_24_ch_18_EndlessStream](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_18_EndlessStream/src/Less_24_ch_18_EndlessStream))\n- skip(long n) - ограничивает стрим снизу, пропускает элементы начиная с n-го элемента.\n  Если в потоке меньше n элементов, возвращается пустой поток.\n  (см. пример [Less_24_ch_15_Stream_Limit](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_15_Stream_Limit/src/Less_24_ch_15_Stream_Limit_Skip) и [Less_24_ch_18_EndlessStream](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_18_EndlessStream/src/Less_24_ch_18_EndlessStream))\n\n### *** Картографирование ***\n\n- map(Function f) - получает функцию в качестве параметра, функция будет применена к каждому элементу стрима,\n  и преобразовав его, согласно правилам функции, вернет в стрим, как новый (преобразованный)\n  элемент.\n  (см. пример [Less_24_ch_1_Stream_Map](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_1_Stream_Map/src/Less_24_ch_1_Stream_Map))\n- flatMap(Function f) -\tполучает функцию в качестве параметра, и заменяет каждое значение в потоке другим\n  потоком, а затем соедините все потоки в один поток.\n  (см. пример [Less_24_ch_11_Stream_flatMap](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_11_Stream_flatMap/src/Less_24_ch_11_Stream_flatMap))\n- mapToDouble(ToDoubleFunction f) -\tполучает функцию в качестве параметра, функция будет применена к каждому\n  элементу, генерируя новый DoubleStream.\n  (см. пример [Less_24_ch_16_Stream_MapToInt](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_16_Stream_MapToInt/src/Less_24_ch_16_Stream_MapToInt))\n- mapToInt(ToIntFunction f)\t- получает функцию в качестве параметра, функция будет применена к каждому\n  элементу для генерации нового IntStream.\n  (см. пример [Less_24_ch_16_Stream_MapToInt](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_16_Stream_MapToInt/src/Less_24_ch_16_Stream_MapToInt))\n\n### *** Сортировака ***\n\n- sorted() - создает новый стрим, который отсортирован в естественном порядке.\n- sorted(Comparator comp) - создать новый стрим, отсортированный по порядку компаратора.\n  (см. пример [Less_24_ch_5_Stream_Sorted](https://github.com/JcoderPaul/JavaExtended-24/tree/master/Less_24_ch_5_Stream_Sorted/src/Less_24_ch_5_Stream_Sorted))\n\n### *********************** Шаг 3 - Терминальная операция ***********************\n\nТерминальная операция или операция завершения потока. Терминальные операции призвана получить результат\nиз стрима (цепочки промежуточных методов). Результатом может быть любое значение, которое не является\nстримом, например, List, Integer или даже void.\n\n### *** Найти и сопоставить ***\n\n- allMatch(Predicate p)\t- проверяет и возвращает true, если все элементы стрима удовлетворяют\n  условию в предикате.\n- anyMatch(Predicate p) - проверяет и возвращает true, если хотя бы один элемент стрима удовлетворяет\n  условию в предикате.\n- noneMatch(Predicate p) - проверяет и возвращает true, если ни один из элементов в стриме не удовлетворяет\n  условию в предикате.\n- findFirst() -\tвозвращает первый элемент стрима.\n- findAny() - возвращает случайный элемент стрима.\n- count() -\tвозвращает общее количество элементов в стриме.\n- max(Comparator c) - возвращает значение максимального элемента в стриме.\n- min(Comparator c) - возвращает значение минимального элемента в стриме.\n- forEach(Consumer\u003c? super T\u003e action) - для каждого элемента стрима выполняется действие action.\n\n### *** Вернуть коллекцию ***\n\n- \u003cR,A\u003e R collect(Collector\u003c? super T,A,R\u003e collector): добавляет элементы в неизменяемый контейнер с типом 'R'.\nГде 'T' представляет тип данных из вызывающего потока, а 'A' - тип данных в контейнере.\n- Object[] toArray() - возвращает массив из элементов потока.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcoderpaul%2Fjavaextended-24","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjcoderpaul%2Fjavaextended-24","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjcoderpaul%2Fjavaextended-24/lists"}