{"id":15068783,"url":"https://github.com/essentials4j/essentials4j","last_synced_at":"2025-10-05T08:31:13.725Z","repository":{"id":144610614,"uuid":"107420829","full_name":"essentials4j/essentials4j","owner":"essentials4j","description":"Essentials for Java 8+","archived":true,"fork":false,"pushed_at":"2018-02-08T21:40:39.000Z","size":76,"stargazers_count":71,"open_issues_count":2,"forks_count":5,"subscribers_count":13,"default_branch":"master","last_synced_at":"2024-09-30T14:11:02.445Z","etag":null,"topics":["collections","elegant","essentials","java","java8","streams"],"latest_commit_sha":null,"homepage":"https://essentials4j.org/","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/essentials4j.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":"2017-10-18T14:38:00.000Z","updated_at":"2024-03-31T14:20:06.000Z","dependencies_parsed_at":null,"dependency_job_id":"9cd4c39e-ec4b-40a8-94d1-078ab2e6e2c3","html_url":"https://github.com/essentials4j/essentials4j","commit_stats":null,"previous_names":[],"tags_count":1,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essentials4j%2Fessentials4j","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essentials4j%2Fessentials4j/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essentials4j%2Fessentials4j/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/essentials4j%2Fessentials4j/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/essentials4j","download_url":"https://codeload.github.com/essentials4j/essentials4j/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235378594,"owners_count":18980472,"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","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","elegant","essentials","java","java8","streams"],"created_at":"2024-09-25T01:39:16.720Z","updated_at":"2025-10-05T08:31:08.418Z","avatar_url":"https://github.com/essentials4j.png","language":"Java","readme":"# essentials4j - the perfect library for every Java 8 project!\n\nEssentials4j is a minimalistic library consisting of:\n - a thin layer of abstraction over Java 8 streams for easy manipulation of collections,\n - simple factory utils for elegant construction of collections.\n\nJava 8 streams are powerful, and essentials4j is just a fantastic way to use them!\n\n## Example\n\n```java\nMap\u003cInteger, String\u003e nums = New.map(1, \"one\", 2, \"two\", 3, \"three\");\n\nMap\u003cInteger, String\u003e even = Do.findIn(nums).all((k, v) -\u003e k % 2 == 0); // {2:\"two\"}\n```\n\n### The code above is a shortcut for:\n\n```java\nMap\u003cInteger, String\u003e nums = new LinkedHashMap\u003c\u003e();\nnums.put(1, \"one\");\nnums.put(2, \"two\");\nnums.put(3, \"three\");\n\nMap\u003cInteger, String\u003e even = nums.entrySet().stream()\n    .filter(entry -\u003e entry.getKey() % 2 == 0)\n    .collect(Collectors.toMap(Entry::getKey, Entry::getValue)); // {2:\"two\"}\n```\n\n## Features\n\nWhat makes essentials4j perfect?\n - Simple, elegant \u0026 straight to the point\n - 100% test coverage\n - 100% documentation coverage\n - Open-source (Apache Public License v2)\n - Lightweight (consists of only 9 classes)\n - Self-contained (no dependencies)\n - Only 15 KB JAR size\n\n## Usage\n\n### Maven dependency\n\n```xml\n \u003cdependency\u003e\n    \u003cgroupId\u003eorg.essentials4j\u003c/groupId\u003e\n    \u003cartifactId\u003eessentials4j\u003c/artifactId\u003e\n    \u003cversion\u003e1.0.0\u003c/version\u003e\n\u003c/dependency\u003e\n```\n\n### API\n\n#### Instantiation:\n\n```java\nList\u003cE\u003e   list  =  New.list(...)\nSet\u003cE\u003e    set   =  New.set(...)\nMap\u003cK,V\u003e  map   =  New.map(...)\n```\n\n#### Searching:\n\n```java\nList\u003cE\u003e      results  =  Do.findIn(items).all(predicate)\nOptional\u003cE\u003e  any      =  Do.findIn(items).any(predicate)\nOptional\u003cE\u003e  first    =  Do.findIn(items).first(predicate)\nOptional\u003cE\u003e  last     =  Do.findIn(items).last(predicate)\nboolean      exists   =  Do.findIn(items).exists(predicate)\n```\n\n#### Transforming:\n\n```java\nList\u003cE\u003e   list  =  Do.map(items).toList(transformation)\nList\u003cE\u003e   set   =  Do.map(items).toSet(transformation)\nMap\u003cK,V\u003e  map   =  Do.map(items).toMap(keyTransformation, valueTransformation)\n```\n\n#### Grouping by classifier:\n\n```java\nMap\u003cT, List\u003cE\u003e\u003e   groups  =  Do.group(collection).by(classifier)\nMap\u003cT, Map\u003cK,V\u003e\u003e  groups  =  Do.group(map).by(classifier)\n```\n\n### Examples: searching through collections\n\nLet's search through this list of items in the following examples:\n\n```java\nList\u003cString\u003e abc = New.list(\"a\", \"bbb\", \"cc\");\n```\n\n#### Find all:\n\n```java\nList\u003cString\u003e words = Do.findIn(abc).all(s -\u003e s.length() \u003e 1); // [\"bbb\", \"cc\"]\n```\n\n#### Find any:\n\n```java\nOptional\u003cString\u003e anyLetter = Do.findIn(abc).any(s -\u003e s.length() == 1); // \"a\"\n```\n\n#### Find first:\n\n```java\nOptional\u003cString\u003e firstWord = Do.findIn(abc).first(s -\u003e s.length() \u003e 1); // \"bbb\"\n```\n\n#### Find last:\n\n```java\nOptional\u003cString\u003e lastWord = Do.findIn(abc).last(s -\u003e s.length() \u003e 1); // \"cc\"\n```\n\n#### Exists:\n\n```java\nboolean hasLetter = Do.findIn(abc).exists(s -\u003e s.length() == 1) // true\n```\n\n### Examples: mapping and grouping collections\n\nLet's transform this list of items in the following examples:\n\n```java\nList\u003cString\u003e abc = New.list(\"a\", \"bb\", \"cc\");\n```\n\n#### Mapping to a List:\n\n```java\nList\u003cInteger\u003e lengths = Do.map(abc).toList(String::length); // [1, 2, 2]\n```\n\n#### Mapping to a Set:\n\n```java\nSet\u003cInteger\u003e lengths2 = Do.map(abc).toSet(String::length);  // [1, 2]\n```\n\n#### Mapping to a Map:\n\n```java\nMap\u003cString, Integer\u003e lengths3 = Do.map(abc).toMap(s -\u003e s, String::length); // {\"a\":1, \"bb\":2, \"cc\":2}\n```\n\n#### Group by:\n\n```java\nMap\u003cInteger, List\u003cString\u003e\u003e byLength = Do.group(abc).by(String::length); // {1:[\"a\"], 2:[\"bb\", \"cc\"]}\n```\n\n### Examples: searching through maps\n\nLet's search through this map of items in the following examples:\n\n```java\nMap\u003cInteger, String\u003e nums = New.map(-1, \"neg\", 0, \"zero\", 1, \"pos\");\n```\n\n#### Find all:\n\n```java\nMap\u003cInteger, String\u003e notNegative = Do.findIn(nums).all((k, v) -\u003e k \u003e= 0); // {0:\"zero\", 1:\"pos\"}\n```\n\n#### Find any:\n\n```java\nOptional\u003cEntry\u003cInteger, String\u003e\u003e anyPositive = Do.findIn(nums).any((k, v) -\u003e k \u003e 0); // 1:\"pos\"\n```\n\n#### Find first:\n\n```java\nOptional\u003cEntry\u003cInteger, String\u003e\u003e firstNonZero = Do.findIn(nums).first((k, v) -\u003e k != 0); // -1:\"neg\"\n```\n\n#### Find last:\n\n```java\nOptional\u003cEntry\u003cInteger, String\u003e\u003e lastNonZero = Do.findIn(nums).last((k, v) -\u003e k != 0); // 1:\"pos\"\n```\n\n#### Exists:\n\n```java\nboolean hasPositive = Do.findIn(nums).exists((k, v) -\u003e k \u003e 0); // true\n```\n\n### Examples: mapping and grouping maps\n\nLet's transform this map of items in the following examples:\n\n```java\nMap\u003cInteger, String\u003e nums = New.map(1, \"one\", 2, \"two\", 3, \"three\");\n```\n\n#### Mapping to a List:\n\n```java\nList\u003cInteger\u003e squared = Do.map(nums).toList((k, v) -\u003e k * k); // [1, 4, 9]\n```\n\n#### Mapping to a Set:\n\n```java\nSet\u003cInteger\u003e wordLengths = Do.map(nums).toSet((k, v) -\u003e v.length()); // [3, 5]\n```\n\n#### Mapping to a Map:\n\n```java\n// {1000:\"ONE\", 2000:\"TWO\", 3000:\"THREE\"}\nMap\u003cInteger, String\u003e thousands = Do.map(nums).toMap((k, v) -\u003e k * 1000, (k, v) -\u003e v.toUpperCase());\n```\n\n#### Group by:\n\n```java\n// { false: {1:\"one\", 3:\"three\"}, true: {2:two} }\nMap\u003cBoolean, Map\u003cInteger, String\u003e\u003e even = Do.group(nums).by((k, v) -\u003e k % 2 == 0);\n```\n","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fessentials4j%2Fessentials4j","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fessentials4j%2Fessentials4j","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fessentials4j%2Fessentials4j/lists"}