{"id":16921037,"url":"https://github.com/alxkm/streamer","last_synced_at":"2025-10-13T14:06:57.924Z","repository":{"id":208482033,"uuid":"548035007","full_name":"alxkm/streamer","owner":"alxkm","description":"Java stream library","archived":false,"fork":false,"pushed_at":"2024-08-03T09:13:42.000Z","size":84,"stargazers_count":10,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-10-13T14:06:08.252Z","etag":null,"topics":["collections","collections-framework","collections-java","java","java-8","javastreams","javautility","javautils","steam-api"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/alxkm.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-08T20:01:18.000Z","updated_at":"2025-01-10T11:50:31.000Z","dependencies_parsed_at":"2024-07-10T00:46:42.587Z","dependency_job_id":"8b20faaf-f040-47b4-98dd-0825b5c9ca87","html_url":"https://github.com/alxkm/streamer","commit_stats":{"total_commits":18,"total_committers":4,"mean_commits":4.5,"dds":0.5,"last_synced_commit":"3dae1013bdb154f81059b11d6193da7a008357a1"},"previous_names":["alxkm/streamer"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/alxkm/streamer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxkm%2Fstreamer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxkm%2Fstreamer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxkm%2Fstreamer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxkm%2Fstreamer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/alxkm","download_url":"https://codeload.github.com/alxkm/streamer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/alxkm%2Fstreamer/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279015702,"owners_count":26085748,"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-10-13T02:00:06.723Z","response_time":61,"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":["collections","collections-framework","collections-java","java","java-8","javastreams","javautility","javautils","steam-api"],"created_at":"2024-10-13T19:50:26.522Z","updated_at":"2025-10-13T14:06:57.904Z","avatar_url":"https://github.com/alxkm.png","language":"Java","readme":"# Streamer\n\n[![Java CI with Gradle](https://github.com/alxkm/streamer/actions/workflows/gradle.yml/badge.svg)](https://github.com/alxkm/streamer/actions/workflows/gradle.yml)[![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)\n\n\n### Java stream utility library, which someone can find useful \n\n### Usage and StreamUtils class overview\n\n## Overview\n`StreamUtils` is a utility class providing various helpful methods for working with Java Streams. It includes methods for stream creation, transformation, collection, and more.\n\n## Methods\n\n### unique\n```java\npublic static \u003cT\u003e Collector\u003cT, Set\u003cT\u003e, List\u003cT\u003e\u003e unique()\n```\nReturns a collector that accumulates elements into a list while ensuring uniqueness.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = Stream.of(\"apple\", \"banana\", \"apple\");\nList\u003cString\u003e uniqueList = stream.collect(StreamUtils.unique());\n```\n\n### asStream (Iterator)\n```java\npublic static \u003cT\u003e Stream\u003cT\u003e asStream(Iterator\u003cT\u003e iterator)\n```\nConverts an `Iterator` into a `Stream`.\n\n**Usage Example:**\n```java\nIterator\u003cString\u003e iterator = List.of(\"a\", \"b\", \"c\").iterator();\nStream\u003cString\u003e stream = StreamUtils.asStream(iterator);\n```\n\n### asStream (Iterable)\n```java\npublic static \u003cT\u003e Stream\u003cT\u003e asStream(Iterable\u003cT\u003e iterable)\n```\nConverts an `Iterable` into a `Stream`.\n\n**Usage Example:**\n```java\nIterable\u003cString\u003e iterable = List.of(\"a\", \"b\", \"c\");\nStream\u003cString\u003e stream = StreamUtils.asStream(iterable);\n```\n\n### arrayToCollection\n```java\npublic static \u003cT\u003e Collection\u003cT\u003e arrayToCollection(Class\u003c? extends Collection\u003e collectionType, T[] array)\n```\nConverts an array to a collection of the specified type.\n\n**Parameters:**\n- `collectionType`: The class representing the desired collection type.\n- `array`: The array to be converted to a collection.\n\n**Usage Example:**\n```java\nString[] array = {\"a\", \"b\", \"c\"};\nList\u003cString\u003e list = (List\u003cString\u003e) StreamUtils.arrayToCollection(ArrayList.class, array);\n```\n\n### filterByType\n```java\npublic static \u003cT\u003e Stream\u003cT\u003e filterByType(Stream\u003c?\u003e stream, Class\u003cT\u003e clazz)\n```\nFilters elements of a stream by a specific type and casts them to that type.\n\n**Parameters:**\n- `stream`: The original stream.\n- `clazz`: The class to filter by.\n\n**Usage Example:**\n```java\nStream\u003cObject\u003e stream = Stream.of(1, \"a\", 2, \"b\", 3);\nStream\u003cString\u003e stringStream = StreamUtils.filterByType(stream, String.class);\n```\n\n### toList\n```java\npublic static \u003cT\u003e List\u003cT\u003e toList(Stream\u003cT\u003e stream)\n```\nCollects elements of a stream into a list.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = Stream.of(\"a\", \"b\", \"c\");\nList\u003cString\u003e list = StreamUtils.toList(stream);\n```\n\n### toSet\n```java\npublic static \u003cT\u003e Set\u003cT\u003e toSet(Stream\u003cT\u003e stream)\n```\nCollects elements of a stream into a set.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = Stream.of(\"a\", \"b\", \"c\", \"a\");\nSet\u003cString\u003e set = StreamUtils.toSet(stream);\n```\n\n### toMap\n```java\npublic static \u003cT, K, U\u003e Map\u003cK, U\u003e toMap(Stream\u003cT\u003e stream, Function\u003c? super T, ? extends K\u003e keyMapper, Function\u003c? super T, ? extends U\u003e valueMapper)\n```\nCollects elements of a stream into a map.\n\n**Parameters:**\n- `stream`: The original stream.\n- `keyMapper`: A function to generate keys.\n- `valueMapper`: A function to generate values.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = Stream.of(\"a\", \"bb\", \"ccc\");\nMap\u003cInteger, String\u003e map = StreamUtils.toMap(stream, String::length, Function.identity());\n```\n\n### groupBy\n```java\npublic static \u003cT, K\u003e Map\u003cK, List\u003cT\u003e\u003e groupBy(Stream\u003cT\u003e stream, Function\u003c? super T, ? extends K\u003e classifier)\n```\nGroups elements of a stream by a classifier function.\n\n**Parameters:**\n- `stream`: The original stream.\n- `classifier`: A function to classify elements.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = Stream.of(\"apple\", \"banana\", \"apricot\", \"cherry\");\nMap\u003cCharacter, List\u003cString\u003e\u003e grouped = StreamUtils.groupBy(stream, s -\u003e s.charAt(0));\n```\n\n### partitionBy\n```java\npublic static \u003cT\u003e Map\u003cBoolean, List\u003cT\u003e\u003e partitionBy(Stream\u003cT\u003e stream, Predicate\u003c? super T\u003e predicate)\n```\nPartitions elements of a stream by a predicate.\n\n**Parameters:**\n- `stream`: The original stream.\n- `predicate`: A predicate to partition elements.\n\n**Usage Example:**\n```java\nStream\u003cInteger\u003e stream = Stream.of(1, 2, 3, 4, 5);\nMap\u003cBoolean, List\u003cInteger\u003e\u003e partitioned = StreamUtils.partitionBy(stream, x -\u003e x % 2 == 0);\n```\n\n### streamOfNullable\n```java\npublic static \u003cT\u003e Stream\u003cT\u003e streamOfNullable(T element)\n```\nReturns a stream containing a single element if the element is non-null, otherwise returns an empty stream.\n\n**Parameters:**\n- `element`: The element.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = StreamUtils.streamOfNullable(\"a\");\n```\n\n### concatStreams\n```java\n@SafeVarargs\npublic static \u003cT\u003e Stream\u003cT\u003e concatStreams(Stream\u003cT\u003e... streams)\n```\nConcatenates multiple streams into one stream.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream1 = Stream.of(\"a\", \"b\");\nStream\u003cString\u003e stream2 = Stream.of(\"c\", \"d\");\nStream\u003cString\u003e result = StreamUtils.concatStreams(stream1, stream2);\n```\n\n### zip\n```java\npublic static \u003cA, B\u003e Stream\u003cPair\u003cA, B\u003e\u003e zip(Stream\u003cA\u003e a, Stream\u003cB\u003e b)\n```\nZips two streams into a single stream of pairs.\n\n**Parameters:**\n- `a`: The first stream.\n- `b`: The second stream.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e streamA = Stream.of(\"a\", \"b\", \"c\");\nStream\u003cInteger\u003e streamB = Stream.of(1, 2, 3);\nStream\u003cPair\u003cString, Integer\u003e\u003e zipped = StreamUtils.zip(streamA, streamB);\n```\n\n### peekAndReturn\n```java\npublic static \u003cT\u003e Stream\u003cT\u003e peekAndReturn(Stream\u003cT\u003e stream, Consumer\u003c? super T\u003e action)\n```\nPerforms an action on each element of a stream and returns the stream.\n\n**Parameters:**\n- `stream`: The original stream.\n- `action`: The action to perform.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = Stream.of(\"a\", \"b\", \"c\");\nStream\u003cString\u003e result = StreamUtils.peekAndReturn(stream, System.out::println);\n```\n\n### findFirst\n```java\npublic static \u003cT\u003e Optional\u003cT\u003e findFirst(Stream\u003cT\u003e stream)\n```\nFinds the first element of a stream, if present.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = Stream.of(\"a\", \"b\", \"c\");\nOptional\u003cString\u003e first = StreamUtils.findFirst(stream);\n```\n\n### batchProcess\n```java\npublic static \u003cT\u003e Stream\u003cList\u003cT\u003e\u003e batchProcess(Stream\u003cT\u003e stream, int batchSize)\n```\nBatches elements of a stream into lists of a given size.\n\n**Parameters:**\n- `stream`: The original stream.\n- `batchSize`: The size of the batches.\n\n**Usage Example:**\n```java\nStream\u003cInteger\u003e stream = Stream.of(1, 2, 3, 4, 5);\nStream\u003cList\u003cInteger\u003e\u003e batches = StreamUtils.batchProcess(stream, 2);\n```\n\n### parallelFilter\n```java\npublic static \u003cT\u003e Stream\u003cT\u003e parallelFilter(Stream\u003cT\u003e stream, Predicate\u003c? super T\u003e predicate)\n```\nFilters elements of a stream in parallel based on a predicate.\n\n**Parameters:**\n- `stream`: The original stream.\n- `predicate`: The predicate to filter elements.\n\n**Usage Example:**\n```java\nStream\u003cInteger\u003e stream = Stream.of(1, 2, 3, 4, 5);\nList\u003cInteger\u003e evenNumbers = StreamUtils.parallelFilter(stream, x -\u003e x % 2 == 0).collect(Collectors.toList());\n```\n\n### parallelMap\n```java\npublic static \u003cT, R\u003e Stream\u003cR\u003e parallelMap(Stream\u003cT\u003e stream, Function\u003c? super T, ? extends R\u003e mapper)\n```\nMaps elements of a stream in parallel using a mapper function.\n\n**Parameters:**\n- `stream`: The original stream.\n- `mapper`: The mapper function to apply to elements.\n\n**Usage Example:**\n```java\nStream\u003cInteger\u003e stream = Stream.of(1, 2, 3, 4, 5);\nList\u003cInteger\u003e doubled = StreamUtils.parallelMap(stream, x -\u003e x * 2).collect(Collectors.toList());\n```\n\n### distinctByKey\n```java\npublic static \u003cT\u003e Predicate\u003cT\u003e distinctByKey(Function\u003c? super T, ?\u003e keyExtractor)\n```\nCreates a predicate that maintains state to allow only distinct elements based on a key extractor function.\n\n**Parameters:**\n- `keyExtractor`: The function to extract keys.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = Stream.of(\"apple\", \"banana\", \"apricot\", \"cherry\");\nList\u003cString\u003e distinct = stream.filter(StreamUtils.distinctByKey(s -\u003e s.charAt(0))).collect(Collectors.toList());\n```\n\n### streamify (Iterator)\n```java\npublic static \u003cT\u003e Stream\u003cT\u003e streamify(Iterator\u003cT\u003e iterator)\n```\nCreates a stream from an iterator.\n\n**Usage Example:**\n```java\n\n\nIterator\u003cString\u003e iterator = List.of(\"a\", \"b\", \"c\").iterator();\nStream\u003cString\u003e stream = StreamUtils.streamify(iterator);\n```\n\n### streamify (Iterable)\n```java\npublic static \u003cT\u003e Stream\u003cT\u003e streamify(Iterable\u003cT\u003e iterable)\n```\nCreates a stream from an iterable.\n\n**Usage Example:**\n```java\nIterable\u003cString\u003e iterable = List.of(\"a\", \"b\", \"c\");\nStream\u003cString\u003e stream = StreamUtils.streamify(iterable);\n```\n\n### flatMapToPair\n```java\npublic static \u003cT, U\u003e Stream\u003cPair\u003cT, U\u003e\u003e flatMapToPair(Stream\u003cT\u003e stream, Function\u003c? super T, Stream\u003cU\u003e\u003e mapper)\n```\nFlattens a stream of collections to a stream of pairs.\n\n**Parameters:**\n- `stream`: The original stream.\n- `mapper`: The function to generate a stream from each element.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = Stream.of(\"a\", \"b\");\nStream\u003cPair\u003cString, Integer\u003e\u003e pairs = StreamUtils.flatMapToPair(stream, s -\u003e Stream.of(s.length()));\n```\n\n### filterNot\n```java\npublic static \u003cT\u003e Stream\u003cT\u003e filterNot(Stream\u003cT\u003e stream, Predicate\u003c? super T\u003e predicate)\n```\nFilters elements that do not match the given predicate.\n\n**Parameters:**\n- `stream`: The original stream.\n- `predicate`: The predicate to filter elements.\n\n**Usage Example:**\n```java\nStream\u003cInteger\u003e stream = Stream.of(1, 2, 3, 4, 5);\nStream\u003cInteger\u003e oddNumbers = StreamUtils.filterNot(stream, x -\u003e x % 2 == 0);\n```\n\n### takeWhile\n```java\npublic static \u003cT\u003e Stream\u003cT\u003e takeWhile(Stream\u003cT\u003e stream, Predicate\u003c? super T\u003e predicate)\n```\nTakes elements while the predicate is true.\n\n**Parameters:**\n- `stream`: The original stream.\n- `predicate`: The predicate to test elements.\n\n**Usage Example:**\n```java\nStream\u003cInteger\u003e stream = Stream.of(1, 2, 3, 4, 5);\nStream\u003cInteger\u003e taken = StreamUtils.takeWhile(stream, x -\u003e x \u003c 4);\n```\n\n### mapToIndex\n```java\npublic static \u003cT\u003e Stream\u003cPair\u003cInteger, T\u003e\u003e mapToIndex(Stream\u003cT\u003e stream)\n```\nMaps elements to their index positions.\n\n**Parameters:**\n- `stream`: The original stream.\n\n**Usage Example:**\n```java\nStream\u003cString\u003e stream = Stream.of(\"a\", \"b\", \"c\");\nStream\u003cPair\u003cInteger, String\u003e\u003e indexed = StreamUtils.mapToIndex(stream);\n```\n\n## Installation\nInclude this library in your project by adding the respective files to your classpath.\n\n## Requirements\nJava 8 or higher is required to use this library.\n\n## Testing\n\nThe repository includes JUnit tests that validate the functionality of each cache implementation. These tests cover repository described functionality.\n\n## License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE.md) file for details.\n\nFeel free to fork and modify these implementations for your own use cases or contribute to enhance them further. If you have any questions or suggestions, please feel free to reach out or open an issue!\n\n## Contributing\n\nContributions are welcome! Please open an issue or submit a pull request for any improvements or bug fixes.\n\n## Acknowledgments\n\nThis repository was inspired by multithreading technics and adapted for educational purposes.\n\n## Contact\n\nFor any questions or suggestions, please feel free to reach out or open an issue!","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falxkm%2Fstreamer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falxkm%2Fstreamer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falxkm%2Fstreamer/lists"}