I have written an Optional type in groovy roughly based on java8s Optional. I implemented and use a fold method and would like to know if it can be improved. First, here comes the Optional (I will only use its fold method for my question though):class Optional<T> {    T value    private Opional(T value) {        this.value = value    }    final Boolean isPresent() {        value != null    }    final Object map(Closure mapper) {        mapper(value).with { Object result ->            if (result != null)                return new Optional(result)            else                return new Optional(null)        }    }    final Object flatMap(Closure mapper) {        if( ! this.isPresent)            return Optional.empty()        else            return this.map(mapper)    }    public Object fold(Closure ifEmpty, Closure f) {        if(isPresent())            return ifEmpty.call()        else            return f.call(value)    }    final static Optional<T> of(T value) {        if(value == null)            throw new IllegalArgumentException(Argument for Optional.of() must not be null)        new Optional<T>(value)    }    final static Optional<T> empty() {        new Optional(null)    }}(I ommitted some methods like orElse and others)Next, there are maybe two result-variables. They are therefore of type Optional. I want to execute an action if at least one of the result variables is present AND successfull. I do it like that:if( resultA.fold({false}, {it.isSuccess()}) || resultB.fold({false}, {it.isSuccess()}) ) {    //execute action}Is it a good way to use fold here or should I just stay with: (resultA.isPresent() && resultA.isSuccess())Also, can/could this usage of fold be improved or are there other ways to work it out?
Using my own Optional type with fold method in groovy
functional programming;groovy;closure