Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

awesome-java8

Curated list of useful, if not amazing, resources that take advantage of Java 8 and "Modern Java" thinking.
https://github.com/tedyoung/awesome-java8

  • Caffeine - High performance Java 8-based in-memory caching library providing a near optimal "hit rate". Well-documented and flexible. :8ball:
  • Atomix - Event-driven framework for coordinating fault-tolerant distributed systems built on the Raft consensus algorithm. :8ball:
  • Derive4J - Code generator for user-defined algebraic data types (aka sum types) based on an enhanced "visitor" pattern. Provides structural pattern matching, laziness, functional setters (return a copy of an object with one field modified) & more. :8ball:
  • Vavr - Adds the notion of Tuples, along with immutable Values and Pattern Matching, to make it easier to write more functional Java code. (Formerly known as Javaslang.) :8ball:
  • jOOλ - Part of the jOOQ series of libraries, provides more Functions, Tuples, and `Seq` that provides methods like `crossJoin()`, `join()`, and `groupBy()`. :8ball:
  • NoException - Allows checked exceptions in functional interfaces and converts exceptions to Optional return. :8ball:
  • ProtonPack - Offers about a dozen utilities for `Stream`, e.g., `takeWhile`, `zip`, `aggregate`, and a `unique` collector. :8ball:
  • Release 21
  • Guava - One of the most widely used and well-written general-purpose Java libraries. As of Release 21, only works with Java 8 (or later). :8ball:
  • Cyclops - Very modular, so only include what you need. From function exception handling (`try`), to generic monad operations, to pattern matching. Specific integrations to Javaslang, functionaljava, and Guava. :8ball:
  • Apollo - A library for writing HTTP microservices that focuses on composability and simplicity, with high performance using modern Java idioms and features. :8ball:
  • SnoopEE - While this is "experimental", it's worth looking at if you're coming to microservices from a "slimmed down" Java EE point of view and need something to handle service discovery. This was shown in a JavaOne 2015 conference talk [here](https://www.youtube.com/watch?v=REuBLPTeFDg). :8ball:
  • Resilience4j - A lightweight, easy-to-use, fault-tolerance library designed for Java8 and functional programming (inspired by Netflix's Hystrix).
  • Speedment - A fluent database access library that looks just like Java 8 code, using the Stream API for querying. Supports MySQL, MariaDB, and PostgreSQL. :8ball:
  • Reactive
  • Cyclops React - A library that focuses on users needing async and lazy streams (formerly Simple React). Very well documented with lots of diagrams (yay!). :8ball:
  • Project Reactor - A second-generation Reactive library for building non-blocking applications on the JVM based on the Reactive Streams Specification.
  • StreamEx - Does what it says: enhances the Java 8 streams. The ["cheat sheet"](https://github.com/amaembo/streamex/blob/master/CHEATSHEET.md) is really nice: if you know what you want (e.g., swap keys and values coming from entries in a map), it tells you how to get it. :8ball:
  • AssertJ - Fluent assertions for Java unit testing, with the 3.0 release requiring Java 8. :8ball:
  • Lambda Behave - BDD-oriented framework that leverages lambdas to make tests more "behavioral". If you've seen Jasmine or Spock, this will be familiar. :8ball:
  • Mockito - The Java 8-specific version of the wonderful mocking library, Mockito. Works great with *AssertJ*. :8ball:
  • Bootique - A "minimally opinionated" web framework that leverages Google's Guice dependency-injection library to include modules such as JOOQ, Curator, Jersey, Kafka, Metrics, and more. :8ball:
  • Jooby Project - A modular web framework that supports multiple servers (Netty, Jetty, and Undertow), Websockets, etc., and can be used in many different ways by including a wide variety of modules, e.g., provide a full MVC web site, or just provide APIs. :8ball:
  • Play Framework - The popular Play Framework, from Typesafe, is "reactive" and built on Akka (the Actor framework) and supports non-blocking I/O, and is stateless. :8ball:
  • Ratpack - Reactive framework built on the [Netty](http://netty.io/) engine for non-blocking I/O. Also supports Groovy. :8ball:
  • Vert.x - Mature, fast, reactive and event-driven framework built on [Netty](http://netty.io) engine for non-blocking I/O. Modular and supports numerous languages. Great community support and documentation. :8ball:
  • Spark Java - Concise (micro-) framework for quickly creating Web APIs or web pages. Does not use annotations. Embeds the [Jetty](http://www.eclipse.org/jetty/) web server. :8ball:
  • FreeBuilder - Writes builder-pattern builders for your code. Very well documented and supports all major IDEs and build tools. Supports Java 8 [mapper methods](https://github.com/google/FreeBuilder#accessor-methods).
  • Modernizer - Use this Maven plugin to find out what libraries you can get rid of and replace with Java 8 (and 7) built-in classes.
  • Java 8 in Action - One of the earlier Java 8 books, but has lots of good diagrams and pictures to help one learn about things like internal vs. external iteration in streams.
  • Java 8 Lambdas - Written by the author of the Lambda Behave testing framework, clearly Richard Warburton knows his lambdas. Concise, yet covers testing & debugging, design, and concurrency.
  • Java SE 8 for the Really Impatient - Cay S. Horstmann has been writing Java books forever. This book is right on target and includes even some of the "minor" new features in Java 8, such as using a lambda to do "compare-and-set" operations on atomic variables.
  • What's New in Java 8 - Free to read online, and includes lots of examples. Includes lambdas, streams, Nashorn (JavaScript engine), and the new Date/Time API.