Skip to content

Commit

Permalink
#2 Added support for orElseGet.
Browse files Browse the repository at this point in the history
  • Loading branch information
cbuschka committed Aug 3, 2021
1 parent 9ac0fcd commit 6493939
Show file tree
Hide file tree
Showing 3 changed files with 48 additions and 0 deletions.
7 changes: 7 additions & 0 deletions src/main/java/com/github/cbuschka/optional/Optional.java
Original file line number Diff line number Diff line change
Expand Up @@ -69,6 +69,13 @@ public <R> Optional<R> map(Function<? super T, ? extends R> mapFunc)
}
}

public T orElseGet(Supplier<? extends T> supplier)
{
Objects.requireNonNull(supplier);

return isPresent() ? value : supplier.get();
}

public boolean isEmpty()
{
return value == null;
Expand Down
6 changes: 6 additions & 0 deletions src/main/java/com/github/cbuschka/optional/Supplier.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
package com.github.cbuschka.optional;

public interface Supplier<T>
{
T get();
}
35 changes: 35 additions & 0 deletions src/test/java/com/github/cbuschka/optional/OptionalTest.java
Original file line number Diff line number Diff line change
Expand Up @@ -148,4 +148,39 @@ public String apply(String s)

assertEquals("bar", result);
}

@Test
public void orElseGetOfNonEmptyGivesValue()
{
Optional<String> given = Optional.of("foo");

String result = given.orElseGet(new Supplier<String>()
{
@Override
public String get()
{
fail("Should not be called.");
return null;
}
});

assertEquals(result, "foo");
}

@Test
public void orElseGetOfEmptyShouldGetFromSupplier()
{
Optional<String> given = Optional.empty();

String result = given.orElseGet(new Supplier<String>()
{
@Override
public String get()
{
return "foo";
}
});

assertEquals("foo", result);
}
}

0 comments on commit 6493939

Please sign in to comment.