Java8 - Learn java.util.Optional class with examples
Learn the Optional class in java8 with examples.
What is Optional Class in java
In Java Applications, Many Developers face NullPointerException
during development. NullPointerException
is a runtime exception that breaks the code.
Java8 introduced the Optional<T>
class to avoid null value checking and NullPointerException
.
Optional is a class defined in java.util
package since Java8 version.
It uses to check the values
or object
are present or not.
It avoids null checks and NullPointerExceptions.
The optional class is a container for holding values.
For example, The below function has a parameter with EmpId. It returns an employee object by making a call to the database with an employee Id.
Employee emp=findEmployeeById(1234) { };
System.out.println("Salary "+emp.getSalary());
Here EmployeeId is 1234. if an employee record does not exist in the database with id=1234, Then it returns a null object.
emp.getSalary() returns NullPointerException
as emp object is null.
It is a common problem that developers overlook it and it causes the application to break. With java8, the Optional
class solves this. We will rewrite the same function as follows.
Optional<Employee> emp=findEmployeeById(1234) { };
optional.ifPresent(emp -> {
System.out.println("Salary= " + emp.getSalary());
});
Optional
has many utility methods to check object is present or not. Here ifPresent()
method checks for the null value. and used the lambda expression in it.
Here is an Optional Signature
public final class Optional extends Object
Optional Example We will see the various usage of optional methods with examples.
How to create an Empty Optional Instance?
This method returns an empty object. No object exists in it. isPresent()
return false and indicate the absence of value.
Optional<String> str = Optional.empty();
System.out.println(str.isPresent()); // outputs false
How to Create an optional non-empty instance?
Optional.of()
method creates non null values. if null is passed, NullPointerException
is thrown on this line and the Optional
object is null.
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional<String> str = Optional.of("One");
System.out.println(str.isPresent()); // outputs true
}
}
Optional ofNullable() method
ofNullable()
method accepts null and not null values.
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional<Object> objOptional= Optional.ofNullable(null);
System.out.println(objOptional.isPresent()); // outputs false
Optional<String> strOptional= Optional.ofNullable("One");
System.out.println(strOptional.isPresent()); // outputs true
}
}
Optional isPresent() method usage
isPresent()
method returns false - if optional
object contains null values, else return true - if contain non null value
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional<Object> objOptional= Optional.ofNullable(null);
System.out.println(objOptional.isPresent()); // outputs false
Optional<String> strOptional= Optional.ofNullable("One");
System.out.println(strOptional.isPresent()); // outputs true
}
}
Optional ifPresent() method example
This method calls a specific consumer if the value is presented.
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional<String> str = Optional.of("one");
str.ifPresent(System.out::println);// This will be called outputs one
Optional<String> str1 = Optional.empty();
str1.ifPresent(System.out::println); // This will not be called as no value preseneted in Optional class
}
}
Optional get() method example
get()
method return value if presented in an optional
container else throws NoSuchElementException. Please check value is presented or absent using isPresent()
before using get()
method.
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional<String> emptyOption = Optional.empty();
Optional<String> strOption = Optional.of("one");
System.out.println( strOption.get());
System.out.println( emptyOption.get());
}
}
output:
one
Exception in thread "main" java.util.NoSuchElementException: No value present
at java.base/java.util.Optional.get(Optional.java:148)
at org.cloudhadoop.defaultmethods.OptionalDemo.main(OptionalDemo.java:31)
Optional orElse() method examples
orElse()
method is useful to return default value if Optional
object is empty if the value is presented, return an optional
value
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional<String> str = Optional.of("one"); // Optional contains string value
System.out.println( str.orElse("defaultvalue")); // Outputs one
Optional<String> str1 = Optional.empty(); // Empty Optional object
System.out.println( str1.orElse("defaultvalue")); // defaultvalue is returned
}
}
Optional orElseGet() method example
orElseGet()
method returns the value if the value is presented, else the supplier
is being called and the value is returned it.
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional<String> emptyOption = Optional.empty();
Optional<String> strOption = Optional.of("one");
System.out.println(emptyOption.orElseGet(() -> " optional null orElseGet"));
System.out.println(strOption.orElseGet(() -> "Optional value orElseGet"));
}
}
Output:
optional null orElseGet
one
Optional orElseThrow method example
orElseThrow
method return value, if the value is presented else supplier
is being called and throws an exception.
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional<String> emptyOption = Optional.empty();
Optional<String> strOption = Optional.of("one");
try {
System.out.println( emptyOption.orElseThrow(()->new Exception("Value is not present in Optional")));
} catch (Exception e) {
e.printStackTrace();
}
try {
System.out.println(strOption.orElseThrow(()->new Exception("Value is not present in Optional")));
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output:
java.lang.Exception: Value is not present in Optional
at org.cloudhadoop.defaultmethods.OptionalDemo.lambda$0(OptionalDemo.java:31)
at java.base/java.util.Optional.orElseThrow(Optional.java:397)
at org.cloudhadoop.defaultmethods.OptionalDemo.main(OptionalDemo.java:31)
one
Optional filter() method example
This method filter is used to filter the list of records.
if the value is presented and matches the given predicate. returning Optional
Object else returning the empty optional object.
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional<String> strOptional = Optional.of("one two three");
Optional<String> optionPredicate = strOptional.filter(s -> s.contains("one"));
optionPredicate.ifPresent(System.out::println);
}
}
Output:
one two three
Optional map() method example
if the value is presented. and do the mapping to Function
. else returning empty optional
object.
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional<String> strOptional = Optional.of("ONETWOTHREE");
Optional<String> srOptional1 = strOptional.map(String::toLowerCase);
srOptional1.ifPresent(System.out::println);
}
}
Output:
onetwothree
Optional flatMap() method with example
flatMap()
is similar to map()
in functional programming.
if the value is presented. and do the specified optional mapping to Function
. else returning empty optional
object.
Here is an java flatMap example
import java.util.Optional;
public class OptionalClassExample {
public static void main(String[] args) {
Optional strOptional = Optional.of("ONETWOTHREE");
Optional strOptional1 = strOptional.flatMap(str -> Optional.of(str + " - appendthis"));
strOptional1.ifPresent(System.out::println);
}
}
Output:
ONETWOTHREE - appendthis