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 ());
}
Java 8 Optional Example posted by Justin Musgrove on 23 February 2014
Tagged: java and java-util
Share on: Facebook Google+
All the code on this page is available on github:
OptionalExample.java