Skip to content

Commit

Permalink
Browse files Browse the repository at this point in the history
  • Loading branch information
memoizr committed Jan 11, 2016
2 parents a4a8bd2 + b3eb17e commit 1c84f17
Showing 1 changed file with 40 additions and 2 deletions.
42 changes: 40 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,40 @@
# retro-optional
A backport of Java8 optionals for Java7
## Retro-Optional
A backport of Java8 monad optionals for Java7.

Example:

Let's say we have an instance of a class `A` which can be nullable, and we're interested in getting the
result of a chain of nested function calls, which eventually will result in a `boolean`. Every intermediate
step may fail and return a null. To get to the end result without optionals we'd have to do multiple
null checks:

```java
boolean result = a != null &&
a.getB() != null &&
a.getB().getC() != null &&
a.getB().getC().isD();
```
But by converting everything to return monadic optionals, the syntax can be streamlined a bit:
```java
boolean result = a.flatMap(A::getB)
.flatMap(A::getC)
.filter(x -> x.isD())
.isPresent();
```
For more examples of how to use Java 8 optional types, you can refer to this excellent article:
http://www.nurkiewicz.com/2013/08/optional-in-java-8-cheat-sheet.html

## Get it
```groovy
repositories {
// ...
maven { url "https://jitpack.io" }
}
```
```groovy
dependencies {
compile 'com.github.memoizr:retro-optional:0.1.0'
}
```


0 comments on commit 1c84f17

Please sign in to comment.