All Projects → tedyoung → Awesome Java8

tedyoung / Awesome Java8

Licence: cc0-1.0
Curated list of useful, if not amazing, resources that take advantage of Java 8 and "Modern Java" thinking.

Programming Languages

java
68154 projects - #9 most used programming language
java8
65 projects

Labels

Projects that are alternatives of or similar to Awesome Java8

Aws Lambda Cpp
C++ implementation of the AWS Lambda runtime
Stars: ✭ 300 (-24.81%)
Mutual labels:  lambda
Nodb
NoDB isn't a database.. but it sort of looks like one.
Stars: ✭ 353 (-11.53%)
Mutual labels:  lambda
Faas
OpenFaaS - Serverless Functions Made Simple
Stars: ✭ 20,820 (+5118.05%)
Mutual labels:  lambda
Grant
OAuth Proxy
Stars: ✭ 3,509 (+779.45%)
Mutual labels:  lambda
Terraform Aws Github Runner
Terraform module for scalable GitHub action runners on AWS
Stars: ✭ 326 (-18.3%)
Mutual labels:  lambda
Aws Microservices Deploy Options
This repo contains a simple application that consists of three microservices. Each application is deployed using different Compute options on AWS.
Stars: ✭ 370 (-7.27%)
Mutual labels:  lambda
Realtime App
Deploy a serverless realtime app built on AWS Lambda using Serverless Components.
Stars: ✭ 299 (-25.06%)
Mutual labels:  lambda
Serverless Rust
⚡ 🦀 a serverless framework plugin for rustlang applications
Stars: ✭ 386 (-3.26%)
Mutual labels:  lambda
Cloud Custodian
Rules engine for cloud security, cost optimization, and governance, DSL in yaml for policies to query, filter, and take actions on resources
Stars: ✭ 3,926 (+883.96%)
Mutual labels:  lambda
Vandium Node
AWS Lambda framework for building functions using Node.js for API Gateway, IoT applications, and other AWS events.
Stars: ✭ 377 (-5.51%)
Mutual labels:  lambda
Aws Serverless Workshops
Code and walkthrough labs to set up serverless applications for Wild Rydes workshops
Stars: ✭ 3,512 (+780.2%)
Mutual labels:  lambda
Aws Security Workshops
A collection of the latest AWS Security workshops
Stars: ✭ 332 (-16.79%)
Mutual labels:  lambda
Pudding
🌟 Pudding use WindowManager(don't need request permission) to pull down a view that are displayed on top their attached window
Stars: ✭ 371 (-7.02%)
Mutual labels:  lambda
Serverless Iam Roles Per Function
Serverless Plugin for easily defining IAM roles per function via the use of iamRoleStatements at the function level.
Stars: ✭ 311 (-22.06%)
Mutual labels:  lambda
Up Examples
Example apps, apis, and sites for Up.
Stars: ✭ 381 (-4.51%)
Mutual labels:  lambda
Lambdaguard
AWS Serverless Security
Stars: ✭ 300 (-24.81%)
Mutual labels:  lambda
Aws Serverless Workshop Innovator Island
Welcome to the Innovator Island serverless workshop! This repo contains all the instructions and code you need to complete the workshop. Questions? Contact @jbesw.
Stars: ✭ 363 (-9.02%)
Mutual labels:  lambda
Bash Lambda Layer
Run Bash scripts in AWS Lambda via Layers
Stars: ✭ 390 (-2.26%)
Mutual labels:  lambda
Plam
An interpreter for learning and exploring pure λ-calculus
Stars: ✭ 385 (-3.51%)
Mutual labels:  lambda
Shep
A framework for building JavaScript Applications with AWS API Gateway and Lambda
Stars: ✭ 376 (-5.76%)
Mutual labels:  lambda

Awesome Java 8 Build Status Awesome

A truly curated list of useful, if not amazingly awesome, tools, libraries, frameworks, and other resources that take advantage of (or even require) Java 8 features, such as Lambdas, or have a more modern approach to writing Java code. Those that require Java 8 are marked with an 🎱 emoji (for "eight ball" or sometimes "billiards").

If you want a larger list of Java resources not specific to Java 8, check out Awesome Java.


Contents


Libraries and Frameworks

Libraries and frameworks become part of your runtime artifact. Libraries consist of code that you call, whereas frameworks require that you inherit from classes or implement interfaces defined in that framework. Modern Java prefers the delegation model of Libraries vs. the inheritance model of frameworks, however in some cases, frameworks might be worth the inheritance cost, e.g., web frameworks.

Caching Libraries

  • Caffeine - High performance Java 8-based in-memory caching library providing a near optimal "hit rate". Well-documented and flexible. 🎱

Distributed Systems libraries

Libraries that support distributed systems, e.g., queues, key-value stores, and quorum/consensus.

  • Atomix - Event-driven framework for coordinating fault-tolerant distributed systems built on the Raft consensus algorithm. 🎱

Functional libraries

Libraries that make Java 8 more functional, especially filling in the gaps in streams. For strictly stream enhancements, go to the Streams libraries section.

  • 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. 🎱
  • 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.) 🎱
  • jOOλ - Part of the jOOQ series of libraries, provides more Functions, Tuples, and Seq that provides methods like crossJoin(), join(), and groupBy(). 🎱
  • NoException - Allows checked exceptions in functional interfaces and converts exceptions to Optional return. 🎱
  • ProtonPack - Offers about a dozen utilities for Stream, e.g., takeWhile, zip, aggregate, and a unique collector. 🎱

General-purpose libraries

For libraries with many features that don't fit in a single category. Honestly, this section was just created so that it can hold Guava, which as of Release 21 requires Java 8+.

  • 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). 🎱

Interoperability libraries

Not sure what to call these other than interoperability libraries, i.e., libraries that make it easier to work with existing libraries that Java 8 provides. I could be convinced to put this under Functional libraries...

  • 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. 🎱

Microservices

While the term can sometimes be ambiguous, hopefully it'll become more clear as new libraries and frameworks become available. This section may include entire frameworks, or libraries that help with coordinating and connecting separately deployed services (aka microservices). For HTTP-based services, see Web App/API frameworks.

  • Apollo - A library for writing HTTP microservices that focuses on composability and simplicity, with high performance using modern Java idioms and features. 🎱
  • 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. 🎱

Networking libraries

Perhaps this belongs in "distributed systems libraries", since dist-sys requires resiliency, though I like calling out resiliency as it's often overlooked. I'll leave this here for now until someone has an opinion.

  • Resilience4j - A lightweight, easy-to-use, fault-tolerance library designed for Java8 and functional programming (inspired by Netflix's Hystrix). In addition to circuit-breakers, also retries, rate-limiting, and metrics. 🎱

Persistence libraries

  • Speedment - A fluent database access library that looks just like Java 8 code, using the Stream API for querying. Supports MySQL, MariaDB, and PostgreSQL. 🎱

Reactive libraries

Focused on "pulling" items from a stream. There may be overlap between these libraries and the Functional ones (above), but the ones here are primarily/exclusively focused on the Reactive way of thinking about streams.

  • Cyclops React - A library that focuses on users needing async and lazy streams (formerly Simple React). Very well documented with lots of diagrams (yay!). 🎱
  • Project Reactor - A second-generation Reactive library for building non-blocking applications on the JVM based on the Reactive Streams Specification. It directly interacts with the Java 8 functional API, Completable Future, Stream and Duration. 🎱

Streams libraries

These are libraries that enhance the existing Java 8 Streams, but aren't trying to define a completely new API. I could be convinced to put these under the Functional libraries, but until then...

  • StreamEx - Does what it says: enhances the Java 8 streams. The "cheat sheet" 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. 🎱

Testing

  • AssertJ - Fluent assertions for Java unit testing, with the 3.0 release requiring Java 8. 🎱
  • Lambda Behave - BDD-oriented framework that leverages lambdas to make tests more "behavioral". If you've seen Jasmine or Spock, this will be familiar. 🎱
  • Mockito - The Java 8-specific version of the wonderful mocking library, Mockito. Works great with AssertJ. 🎱

Web App/API frameworks

Frameworks (and micro-frameworks) that make it easy to create services that provide Web APIs (aka REST), and/or full web sites without a "full-blown" JAX-RS implementation.

  • 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. 🎱
  • 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. 🎱
  • 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. 🎱
  • Ratpack - Reactive framework built on the Netty engine for non-blocking I/O. Also supports Groovy. 🎱
  • Vert.x - Mature, fast, reactive and event-driven framework built on Netty engine for non-blocking I/O. Modular and supports numerous languages. Great community support and documentation. 🎱
  • Spark Java - Concise (micro-) framework for quickly creating Web APIs or web pages. Does not use annotations. Embeds the Jetty web server. 🎱

Tools

Tools to help upgrade your code to Java 8, generate code, or other utilities that don't become part of your codebase.

  • FreeBuilder - Writes builder-pattern builders for your code. Very well documented and supports all major IDEs and build tools. Supports Java 8 mapper 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.

Books

I hesitated to add this, but with the restriction that these be real books and videos (as in, not a promotion or tied to a specific vendor of products), then let's see how this goes.

  • 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.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].