1. Introduction
In this quick tutorial, we’ll present different ways to transform a null or empty String into an empty Optional.
Getting an empty Optional out of null is straightforward — we just use Optional.ofNullable(). But, what if we want empty Strings to work this way as well?
So, let’s explore some different options for converting an empty String into an empty Optional.
2. Using Java 8
In Java 8, we can leverage the fact that if an Optional#filter‘s predicate isn’t met, then it returns an empty Optional:
@Test public void givenEmptyString_whenFilteringOnOptional_thenEmptyOptionalIsReturned() { String str = ""; Optional<String> opt = Optional.ofNullable(str).filter(s -> !s.isEmpty()); Assert.assertFalse(opt.isPresent()); }
And we don’t even need to check for null here since ofNullable will short-circuit for us in cases where str is null.
Creating a special lambda for the predicate is a bit cumbersome, though. Can’t we get rid of it somehow?
3. Using Java 11
The answer to the above wish doesn’t actually come until Java 11.
In Java 11, we’ll still use Optional.filter(), but Java 11 introduces a new Predicate.not() API that makes it easy to negate method references.
So, let’s simplify what we did earlier, now using a method reference instead:
@Test public void givenEmptyString_whenFilteringOnOptionalInJava11_thenEmptyOptionalIsReturned() { String str = ""; Optional<String> opt = Optional.ofNullable(str).filter(Predicate.not(String::isEmpty)); Assert.assertFalse(opt.isPresent()); }
4. Using Guava
We can also use Guava to satisfy our needs. However, in that case, we’ll use a slightly different approach.
Instead of calling a filter method on an outcome of Optional#ofNullable, we’ll first convert an empty String to null using Guava’s String#emptyToNull and only then pass it to Optional#ofNullable:
@Test public void givenEmptyString_whenPassingResultOfEmptyToNullToOfNullable_thenEmptyOptionalIsReturned() { String str = ""; Optional<String> opt = Optional.ofNullable(Strings.emptyToNull(str)); Assert.assertFalse(opt.isPresent()); }
5. Conclusion
In this short article, we’ve explored different ways to transform an empty String to an empty Optional.
As usual, the examples used in this article can be found in our GitHub project.