Scala Exercises by 47 Degrees offers multiple online exercises to learn about the type classes and datatypes included in Cats.
Scala Pet Store Demonstrates FP techniques while maintaining approachability for people with an OO background. Uses tagless final for the core domain, and popular Typelevel libraries including Cats, Http4s, Circe and Doobie.
😻 Category Theory for Programmers by Bartosz Milewski is a series of category theory lectures oriented towards programmers. The sample code is in basic Haskell/C++ but the course is designed for programmers of all background to follow.
Easy and efficient data validation with Cats by Daniela Sfregola this talk introduces Cats, and some of its most interesting components for data validation. In particular, we’ll discuss some options to achieve efficient and expressive data validation. We will also argue that, compared to other options in the language, Cats is particularly suited for the task thanks to its easy-to-use data types and more approachable syntax.
Resilience4j is a lightweight fault tolerance library inspired by Netflix Hystrix, but designed for Java 8 and functional programming https://github.com/resilience4j/resilience4j
Specter rejects Clojure's restrictive approach to immutable data structure manipulation, instead exposing an elegant API to allow any sort of manipulation imaginable. https://github.com/nathanmarz/specter
Potemkin is a collection of facades and workarounds for things that are more difficult than they should be. All functions are within the potemkin namespace. https://github.com/ztellman/potemkin
A execution plugin implementation for debugging RxJava. RxJava gives you low level plugin hooks for things like create, subscribe and lift. The DebugHook defined in this project uses those to give you hooks for the start/end/error of Subscribe, OnNext, OnError, OnComplete and Unsubscribe. https://github.com/ReactiveX/RxJavaDebug
https://github.com/aol/micro-server
Microserver is a Java 8 native, zero configuration, standards based, battle hardened library to run Java Rest Microservices via a standard Java main class. Supporting pure Microservice or Micro-monolith styles. http://micro-server.io/
Deprecation warning
Agents have been deprecated and are scheduled for removal in the next major version. We have found that their leaky abstraction (they do not work over the network) make them inferior to pure Actors, and in face of the soon inclusion of Akka Typed we see little value in maintaining the current Agents.
Contain persistent(immutable) collections/Functional Data Structures 📌
vavr ❤️ , VΛVΓ (Vavr, formerly called Javaslang) is a non-commercial, non-profit object-functional library that runs with Java 8+. It aims to reduce the lines of code and increase code quality.
sophisticated FP Languages ❤️ have built-in Persistent Collections support 📌
Scala ❤️ , Scala combines object-oriented and functional programming in one concise, high-level language. Scala's static types help avoid bugs in complex applications, and its JVM and JavaScript runtimes let you build high-performance systems with easy access to huge ecosystems of libraries.
Clojure ❤️ , Clojure is a dynamic, general-purpose programming language, combining the approachability and interactive development of a scripting language with an efficient and robust infrastructure for multithreaded programming. Clojure is a compiled language, yet remains completely dynamic – every feature supported by Clojure is supported at runtime. Clojure provides easy access to the Java frameworks, with optional type hints and type inference, to ensure that calls to Java can avoid reflection.
fastutil ❤️ , fastutil extends the Java™ Collections Framework by providing type-specific maps, sets, lists and queues with a small memory footprint and fast access and insertion; provides also big (64-bit) arrays, sets and lists, and fast, practical I/O classes for binary and text files.
hppc, HPPC provides template-generated implementations of typical collections, such as lists, sets and maps, for all Java primitive types. The primary driving force behind HPPC is optimization for highest performance and memory efficiency.
JCTools ❤️ , offer some concurrent data structures currently missing from the JDK. JCTools offers excellent performance. It's stable and in use by such distinguished frameworks as Netty, RxJava and others.
disruptor ❤️ , A High Performance Inter-Thread Messaging Library. Achieve very low-latency and high-throughput with our Java platform. Performance testing showed that using queues to pass data between stages of the system was introducing latency, so we focused on optimising this area.
caffeine ❤️ , Caffeine is a high performance, near optimal caching library based on Java 8. For more details, see our user's guide and browse the API docs for the latest release.
Caffeine is the Java 8 successor to ConcurrentLinkedHashMap and Guava's cache. Projects should prefer Caffeine and migrate when requiring JDK8 or higher. The previous caching projects are supported in maintenance mode.
concurrentlinkedhashmap, A high performance version of java.util.LinkedHashMap for use as a software cache.
Caffeine is the Java 8 successor to ConcurrentLinkedHashMap and Guava's cache. Projects should prefer Caffeine and migrate when requiring JDK8 or higher. The previous caching projects are supported in maintenance mode.
mapdb ❤️ , MapDB provides Java Maps, Sets, Lists, Queues and other collections backed by off-heap or on-disk storage. It is a hybrid between java collection framework and embedded database engine.
Chronicle Map ❤️ , Chronicle Map is a super-fast, in-memory, non-blocking, key-value store, designed for low-latency, and/or multi-process applications such as trading and financial market applications.
Chronicle Queue ❤️ , Chronicle Queue is a Java project focused on building a persisted low-latency messaging framework for high performance and critical applications.
Store complete history of all your messages to disk. With Chronicle Queue you are able to persist every single event and message, It records each event to a memory mapped file.
it is well known that guava is more than a collection lib
Caffeine is the Java 8 successor to ConcurrentLinkedHashMap and Guava's cache. Projects should prefer Caffeine and migrate when requiring JDK8 or higher. The previous caching projects are supported in maintenance mode.
The Java Unified Expression Language is a special purpose programming language mostly used in Java web applications for embedding expressions into web pages. The Java specification writers and expert groups of the Java web-tier technologies have worked on a unified expression language which was first included in the JSP 2.1 specification (JSR-245), and later specified by itself in JSR-341, part of Java EE 7. https://en.wikipedia.org/wiki/Unified_Expression_Language
Spring Expression Language (SpEL)
a powerful expression language that supports querying and manipulating an object graph at runtime. The language syntax is similar to Unified EL but offers additional features, most notably method invocation and basic string templating functionality.
MVEL has largely been inspired by Java syntax, but has some fundamental differences aimed at making it more efficient as an expression language, such as operators that directly support collection, array and string matching, as well as regular expressions. MVEL is used to evaluate expressions written using Java syntax.
an expression language for getting and setting properties of Java objects. You use the same expression for both getting and setting the value of a property.
an implementation of the Unified Expression Language (EL), specified as part of the JSP 2.1 standard (JSR-245), which has been introduced in JEE5. Additionally, JUEL 2.2 implements the JSP 2.2 maintenance release specification for full JEE6 compliance.
provides the Rule abstraction to create rules with conditions and actions, and the RulesEngine API that runs through a set of rules to evaluate conditions and execute actions.
fixes many of the problems found in the JDK serialization API while remaining fully compatible with java.io.Serializable and its relatives,
and adds several new tunable parameters and additional features, all of which are pluggable via factory configuration (externalizers, class/instance lookup tables, class resolution, and object replacement, to name a few).
this framework was inspired by the need for certain features unavailable with the standard Object*Stream classes
Pluggable class resolvers, making it easy to customize classloader policy, by implementing a small interface (rather than having to subclass the Object*Stream classes)
Pluggable object replacement (also without subclassing)
Pluggable predefined class tables, which can dramatically decrease stream size and serialization time for stream types which frequently use a common set of classes
Pluggable predefined instance tables, which make it easy to handle remote references
Pluggable externalizers which may be used to serialize classes which are not Serializable, or for which an alternate strategy is needed
Customizable stream headers
Each marshaller instance is highly configurable and tunable to maximize performance based on expected usage patterns
A generalized API which can support many different protocol implementations, including protocols which do not necessarily provide all the above features
Inexpensive instance creation, beneficial to applications where many short-lived streams are used
Support for separate class and instance caches, if the protocol permits; useful for sending multiple messages or requests with a single stream, with separate object graphs but retaining the class cache
vavr ❤️ , VΛVΓ (Vavr, formerly called Javaslang) is a non-commercial, non-profit object-functional library that runs with Java 8+. It aims to reduce the lines of code and increase code quality.
jOOL, The Missing Parts in Java 8 jOOλ improves the JDK libraries in areas where the Expert Group's focus was elsewhere. It adds tuple support, function support, and a lot of additional functionality around sequential Streams.