Optional and Absence Modeling

Optional<T> models a value that may be absent. It is most useful as a return type when absence is a meaningful outcome.

Optional<String> username = findUsername();

String display = username
    .map(String::trim)
    .filter(value -> !value.isEmpty())
    .orElse("anonymous");

Avoid using Optional as a field or parameter by default. orElse evaluates its fallback immediately, while orElseGet evaluates a supplier lazily.

Avoid get() without first establishing presence.

Optional is not a magic null killer

Use Optional deliberately at API boundaries where absence is part of the contract.

Key Takeaways
  • Use Optional to model meaningful absence.
  • orElseGet is lazy; orElse evaluates its argument eagerly.
  • Avoid unsafe Optional.get() patterns.