Over a million developers have joined DZone.

Idiomatic Optionals

Developers still struggle to use Optionals properly in Java. Here is a simple rule to follow in your code so you don't fall into the trap.

· Java Zone

Learn more about the advantages of moving from a monolithic to microservices architecture.  Brought to you in partnership with IBM.

Java 8 was released over 20 months ago and Java 7 already reached the end of life, yet it’s not that hard to stumble upon new code that uses classes from Java 8 but looks like it was coded in a Java 7.The anti-pattern I’m talking about is most common when conditional logic needs to be applied to java.util.Optional and it looks like this:

public Optional<String> getClientNumber(String personalId) {
    Optional<Client> client = clientRepository.getByPersonalId(personalId);
    return client.isPresent() ? Optional.of(client.get().getNumber()) : Optional.empty();

while it should look like that:

public Optional<String> getClientNumber(String personalId) {
    return clientRepository.getByPersonalId(personalId)

As a rule of thumb every time you use an if-else block or ternary operator to consume Optional’s value or produce an alternative one take a moment and check if it can be written in an idiomatic way.Most of the time it can and should be written in such way because it makes the code more readable.

The only case I came across that requires ternary operator is when you need to convert an Optional<T> to a Stream<T>, fortunately, that will be taken care of in Java 9.      

From Idea to Application gives you the architecture to quickly build, manage and run a range of applications (web, mobile, big data, new smart devices, etc.) on an open-standard, cloud-based platform. See why developers are using IBM Bluemix. Brought to you in partnership with IBM.


Published at DZone with permission of Kamil Szymański. See the original article here.

Opinions expressed by DZone contributors are their own.

The best of DZone straight to your inbox.

Please provide a valid email address.

Thanks for subscribing!

Awesome! Check your inbox to verify your email so you can start receiving the latest in tech news and resources.

{{ parent.title || parent.header.title}}

{{ parent.tldr }}

{{ parent.urlSource.name }}