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


0 0 votes
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x