Skip to main content
edited tags
Link
Jamal
  • 35.2k
  • 13
  • 134
  • 238
Source Link
valenterry
  • 429
  • 2
  • 8

Using my own Optional type with fold method in groovy

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?