Java Optional Object
Optional
is a container object introduced in Java 8 that may or may not contain a non-null value. It provides a more expressive and safer way to handle potentially null values, avoiding the risks associated with directly using null. Here are various ways to use Optional
:
1. Creating Optional
Objects
Empty
Optional
:1
Optional<String> emptyOpt = Optional.empty();
Non-empty
Optional
:1
2String name = "Java";
Optional<String> nameOpt = Optional.of(name);Nullable
Optional
:1
2String nullableName = ...; // could be null
Optional<String> nullableNameOpt = Optional.ofNullable(nullableName);
2. Checking if a Value is Present
Check if present:
1
2
3if (nameOpt.isPresent()) {
System.out.println("Value is present.");
}If present, execute:
1
nameOpt.ifPresent(name -> System.out.println("Name: " + name));
3. Retrieving the Value from Optional
Get the value (use cautiously):
1
String name = nameOpt.get(); // Use only when sure that a value is present
Return value if present, otherwise return a default value:
1
String name = nameOpt.orElse("Default Name");
Return value if present, otherwise invoke a function to provide a value:
1
String name = nameOpt.orElseGet(() -> getDefaultName());
Return value if present, otherwise throw an exception:
1
String name = nameOpt.orElseThrow(() -> new NoSuchElementException("No value present"));
4. Transforming Optional
Values
Map the value:
1
Optional<Integer> nameLength = nameOpt.map(String::length);
Flat map the value:
1
Optional<String> upperNameOpt = nameOpt.flatMap(this::toUpperCaseOpt);
5. Using Optional
for Chained Calls
1 | Optional<String> opt = Optional.ofNullable("Java") |
Example of Using Optional
Here’s a comprehensive example that demonstrates creating, checking, and retrieving values from Optional
objects:
1 | import java.util.Optional; |
In this example:
- Various ways to create
Optional
objects are demonstrated. - Methods for checking if a value is present and for retrieving values safely are shown.
- Examples of transforming and chaining
Optional
values are included. - Custom function
toUpperCaseOpt
demonstrates how to useflatMap
withOptional
.