Merge pull request #44 from kemitix/maybe-or
Add Maybe.or(Supplier<Maybe>)
This commit is contained in:
commit
5e171f8962
6 changed files with 49 additions and 0 deletions
|
@ -4,6 +4,7 @@ CHANGELOG
|
|||
0.12.0
|
||||
------
|
||||
|
||||
* Add Maybe.or(Supplier<Maybe>)
|
||||
* Add Result.reduce(Result,BinaryOperator)
|
||||
* Rename Result.invert() as Result.swap()
|
||||
* [admin] pom: update urls to github
|
||||
|
|
10
README.org
10
README.org
|
@ -444,6 +444,16 @@
|
|||
#+END_SRC
|
||||
|
||||
|
||||
**** =T or(Supplier<Maybe<T> alternative)=
|
||||
|
||||
Provide an alternative Maybe to use when Maybe is Nothing.
|
||||
|
||||
#+BEGIN_SRC java
|
||||
final Maybe<Integer> value = Maybe.maybe(getValue())
|
||||
.or(() -> Maybe.just(defaultValue));
|
||||
#+END_SRC
|
||||
|
||||
|
||||
**** =void orElseThrow(Supplier<Exception> error)=
|
||||
|
||||
Throw the exception if the Maybe is a Nothing.
|
||||
|
|
|
@ -118,6 +118,11 @@ final class Just<T> implements Maybe<T> {
|
|||
justMatcher.accept(value);
|
||||
}
|
||||
|
||||
@Override
|
||||
public Maybe<T> or(final Supplier<Maybe<T>> alternative) {
|
||||
return this;
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stream<T> stream() {
|
||||
return Stream.of(value);
|
||||
|
|
|
@ -177,4 +177,13 @@ public interface Maybe<T> extends Functor<T, Maybe<?>> {
|
|||
* @param nothingMatcher the Runnable to call if the Maybe is a Nothing
|
||||
*/
|
||||
void match(Consumer<T> justMatcher, Runnable nothingMatcher);
|
||||
|
||||
/**
|
||||
* Maps the Maybe into another Maybe only when it is nothing.
|
||||
*
|
||||
* @param alternative the maybe to map the nothing into
|
||||
*
|
||||
* @return the original Maybe if not nothing, or the alternative
|
||||
*/
|
||||
Maybe<T> or(Supplier<Maybe<T>> alternative);
|
||||
}
|
||||
|
|
|
@ -100,6 +100,11 @@ final class Nothing<T> implements Maybe<T> {
|
|||
nothingMatcher.run();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Maybe<T> or(final Supplier<Maybe<T>> alternative) {
|
||||
return alternative.get();
|
||||
}
|
||||
|
||||
@Override
|
||||
public Stream<T> stream() {
|
||||
return Stream.empty();
|
||||
|
|
|
@ -292,4 +292,23 @@ public class MaybeTest implements WithAssertions {
|
|||
assertThat(isNothing).isTrue();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void just_or_ignoreTheAlternative() {
|
||||
//given
|
||||
final Maybe<String> one = Maybe.just("one");
|
||||
//when
|
||||
final Maybe<String> result = one.or(() -> Maybe.just("two"));
|
||||
//then
|
||||
assertThat(result.toOptional()).contains("one");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void nothing_or_isTheAlternative() {
|
||||
//given
|
||||
final Maybe<String> one = Maybe.nothing();
|
||||
//when
|
||||
final Maybe<String> result = one.or(() -> Maybe.just("two"));
|
||||
//then
|
||||
assertThat(result.toOptional()).contains("two");
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue