DZone
Thanks for visiting DZone today,
Edit Profile
  • Manage Email Subscriptions
  • How to Post to DZone
  • Article Submission Guidelines
Sign Out View Profile
  • Post an Article
  • Manage My Drafts
Newsletter
Log In / Join
Refcards Trend Reports
Events Video Library
Refcards
Trend Reports

Events

View Events Video Library

Related

  • SmartXML: An Alternative to XPath for Complex XML Files
  • Soft Skills Are as Important as Hard Skills for Developers
  • Training ChatGPT on Your Own Data: A Guide for Software Developers
  • Unleashing Excellence in Software Product Engineering

Trending

  • AI Coding Agent Guardrails: Finding Gaps in Tool Permissions
  • When One Docker Swarm Replica Became Unreachable Over an Overlay Network: A Production Case With Traefik
  • Event-Driven AI Systems With Kafka and Autonomous Agents
  • Idempotency Under Concurrency: Why Your Application Check Isn't the Last Line of Defense

Draft This article hasn't been published, so readers can't see it.

In moderation This article is waiting for review, so readers can't see it yet.

Deleted This article has been deleted, so readers can't see it.

  1. DZone
  2. Data Engineering
  3. Data
  4. Is it Worth it to Use 'Optional' in Collections?

Is it Worth it to Use 'Optional' in Collections?

There's a practical reason to use Optional in collections. It's just other developers who ruin it for you.

By 
Peter Verhas
DZone Core CORE ·
Aug. 28, 15 · Tutorial
Post on X (opens in a new tab) Share on LinkedIn (opens in a new tab)
19.4K Views

Join the DZone community Save articles, join the discussion, and download Refcards and Trend Reports with a free account.

Join for free Already a member? Log in

Some argue that the Optional type is worth being used in collections. It allegedly solves the problems like a HashMap that returns null if there is no mapping for a key or if null is mapped to the key. If you use a Map<Optional<Something>> then you can clearly separate a missing mapping and an absent value. And that way you are one level deeper in the rabbit hole.

First of all...

You can...

...tell if a key is mapped to null or not mapped without using Optional. There is the method containsKey(). This is one more method call to separate the non-mapped key from a mapped null value. However, calling Optional does this too. So what is the point? On the other hand...

You do not need...

...to tell if the key is mapped to null or if the mapping is missing. If there is a difference in your program code between the two cases then you coded the business logic in the wrong way. This is certainly a code smell. Think of null as “nothing,” and instead of thinking “null is assigned to the key ‘aaaaaarrghhh'” say out loud: Nothing is assigned to the key ‘aaaaaarrghhh’. You see? There is no difference.  And now everyone in your office is giving you funny looks.

Using Optional as a value in a Map...

You will...

...end up one level deeper in the rabbit hole after a while. Code lives an independent life. It is not only you, who develop it. In large organizations there are developers who are certainly drunk when coding. (This is the only reasonable explanation for some code.) They will soon populate your Map<Optional<Something>> with

  • Null values,
  • Absent Optional values
  • and even  Optional objects that wrap something else, but not your “Something“.

From time to time, if you are lucky you may even find some non-null, non-absent Optional<Something> values.

Business logic Coding (social sciences) dev Data structure Object (computer science)

Published at DZone with permission of Peter Verhas. See the original article here.

Opinions expressed by DZone contributors are their own.

Related

  • SmartXML: An Alternative to XPath for Complex XML Files
  • Soft Skills Are as Important as Hard Skills for Developers
  • Training ChatGPT on Your Own Data: A Guide for Software Developers
  • Unleashing Excellence in Software Product Engineering

Partner Resources

×

Comments

Loading comments

The comments didn't load

Please try again in a moment.

Likes

Loading

The next likes didn't load. Please try again.

The likes didn't load

Please try again in a moment.

See who liked this

Log in or join DZone for free to see who liked this article.

Log in Join for free
  • RSS
  • X
  • Facebook

ABOUT US

  • About DZone
  • Support and feedback
  • Community research

ADVERTISE

  • Advertise with DZone

CONTRIBUTE ON DZONE

  • Article Submission Guidelines
  • Become a Contributor
  • Core Program
  • Visit the Writers' Zone

LEGAL

  • Terms of Service
  • Privacy Policy

CONTACT US

  • 3343 Perimeter Hill Drive
  • Suite 215
  • Nashville, TN 37211
  • [email protected]

Let's be friends:

  • RSS
  • X
  • Facebook