Optional is new class introduced in Java 8 used to model a potentially missing value without using a null reference. Similar to guava's optional class, it provides a way for developers to give null a name, increase readability to programs, and have the ability to return values that may or may not be present. There is also primitive specialized version of Optional: OptionalInt, OptionalDouble and OptionalLong.
Setup
class Framework {
String name;
int communityUsers;
}
get
@Test
public void optional_get () {
Framework framework = new Framework();
framework.communityUsers = 200000;
framework.name = "Java";
Optional<Framework> optionalFramework = Optional.of(framework);
assertEquals("Java", optionalFramework.get().name);
}
ifPresent
@Test
public void optional_ifPresent () {
Framework framework = new Framework();
framework.communityUsers = 200000;
framework.name = "Java";
Optional<Framework> optionalFramework = Optional.of(framework);
optionalFramework.ifPresent(p -> System.out.println(p.name));
// or
optionalFramework.ifPresent(System.out::println);
}
isPresent
@Test
public void optional_ispresent () {
Optional<Framework> framework = Optional.of(new Framework());
assertTrue(framework.isPresent());
}
orElse
@Test
public void optional_orElse () {
Framework framework = new Framework();
framework.communityUsers = 200000;
framework.name = "Java";
Optional<Framework> nullOptional = Optional.ofNullable(null);
Framework orElseFramework = nullOptional.orElse(framework);
assertEquals("Java", orElseFramework.name);
}
orElseGet
@Test
public void optional_orElseGet () {
Optional<Framework> optionalFramework = Optional.empty();
Supplier<Framework> defaulFramework = new Supplier<OptionalExample.Framework>() {
@Override
public Framework get() {
Framework framework = new Framework();
framework.communityUsers = 200000;
framework.name = "Java";
return framework;
}
};
Framework framework = optionalFramework.orElseGet(defaulFramework);
assertEquals("Java", framework.name);
}
orElseThrow
@Test(expected=IllegalStateException.class)
public void optional_orElseThrow () {
Optional<Framework> optionalFramework = Optional.empty();
optionalFramework.orElseThrow(IllegalStateException::new);
}
empty
@Test
public void optional_empty () {
Optional<Framework> optionalFramework = Optional.empty();
assertFalse(optionalFramework.isPresent());
}
of
@Test
public void optional_of() {
Framework framework = new Framework();
framework.communityUsers = 10000;
framework.name = "Scala";
Optional<Framework> optionalFramework = Optional.of(framework);
assertEquals("Scala", optionalFramework.get().name);
}
ofNullable
@Test
public void optional_ofNullable () {
Optional<Framework> optionalFramework = Optional.ofNullable(null);
assertFalse(optionalFramework.isPresent());
}