Future & functional based programming via JDK compatible extensions for Java 8 and above.
Getting cyclops-react
Gradle
where x.y.z represents the latest version
compile 'com.aol.simplereact:cyclops-react:x.y.z'
Maven
<dependency>
<groupId>com.aol.simplereact</groupId>
<artifactId>cyclops-react</artifactId>
<version>x.y.z</version>
</dependency>Features
Used in Aol to build robust, performant & scalable asynchronous systems : features include
- Compatible extensions to JDK interfaces (Collections, Streams, Functions)
- Built with jOOλ, reactive-streams ,Agrona and pCollections
- Extensions for efficient JDK compatible persistent collections (pCollections)
- FutureStreams for managing aggregates for Future Tasks (e.g. for multi-threaded execution of large numbers of I/O tasks)
- Single-threaded asynchronous streaming
- Scheduling of data emission
- Powerful extended type hierarchy for aggregrations (Collections & Streams) and single values
- Powerful functional-style control structures, implemented in Java friendly manner (Maybe, Eval, FutureW, Xor, Ior, Try, AnyM, structural & guard based pattern matching, for-comprehensions)
- Execute functions between wrapped values (Optional / CompletableFutre etc) without tedious unwrapping (Java friendly Applicative support).
- Java friendly abstractions for wrapping any Monad type (Stream, CompletableFuture, Optional, cyclops-react types and types from other Java projects too). AnyM and it's two subtypes AnyMSeq for aggregates (Steam, List etc) and AnyMValue for Values
- Monad Transformers - for manipulating nesting monadic types (e.g. Optionals within a Stream as if it were just an Optional)
- Applicatives - apply functions across wrapped types (e.g. Optional / Maybe / Xor) without unwrapping & aggregate without terminate on failure
- Structural pattern matching & pattern matching via Guards (see Matchable and Matchables)
- Full strength for comprehensions / generators (reference elements from other generators)
Tight integration with reactive-streams : collections, streams and datatypes are publishers & can be generated via subscribers
Very Extensible & integration with other projects via cyclops-integration modules.
Documentation
Articles
- Reactive programming with Java 8 and simple-react: The Tutorial
- JDK Collection eXtensions
- Awesome Fluent Functions
- Articles on medium
- Introducting the Cyclops Monad API
- Easier Try with Cyclops
- 4 flavors of Java 8 Functions
- Memoise Functions in Java 8
- Strategy Pattern in Java 8
- Straightfoward structural Pattern Matching in Java 8
- Functional Feature Toggling
- Dependency injection using the Reader Monad in Java8
- Scheduling a Stream
- Neophytes guide to Java 8 : Welcome to the Future
- Deterministic and Non-Deterministic Finite State Machines with Cyclops
License
cyclops-react is licensed under the Apache 2.0 license.

