Filtering out the Optional.empty
Problem
You have a collection in Java with Optionals and some of them are empty. You wish to remove the empty ones.
Solution
Stream. If you use Java 8 and beyond, you can use the stream API. Let’s suppose that you have the following list of Optionals:
List<Optional<Object>> objectList = List.of(Optional.empty() ,Optional.of("test"),
Optional.empty(), Optional.of(499), Optional.of(3444),
Optional.of(33.33), Optional.of('a'));
Using filter() and map()
We filter out any Optional.empty() and then map them with Optional.get as follows:
List<Object> nonEmpty = objectList.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
Let’s put the code above into a main method and print the items to verify the outcome:
public static void main(String[] args) {
List<Optional<Object>> objectList = Arrays.asList(Optional.empty(), Optional.of("test"),
Optional.empty(), Optional.of(499), Optional.of(3444),
Optional.of(33.33), Optional.of('a'));
List<Object> nonEmpty = objectList.stream()
.filter(Optional::isPresent)
.map(Optional::get)
.collect(Collectors.toList());
nonEmpty.forEach(System.out::println);
}
Output
test
499
3444
33.33
a
Conclusion
We just saw how to remove the Optional.empty using streams and filter. Check out more Java posts