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:
while it should look like that:
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.