# Use Optional::ifPresent
# Description
The usage of Optional.get should be avoided in general because it can potentially throw a NoSuchElementException (it is likely to be deprecated in future releases). It is often the case that the invocation of Optional.get is wrapped by a condition that uses Optional.isPresent. Such cases can be replaced with the Optional.ifPresent(Consumer<? super T> consumer).
# Benefits
Improves readability and enables the use of higher order functions on Optional.
# Tags
# Code Changes
# Default
Pre
public void defaultUseCase_shouldTransform(Optional<String> input) {
if (input.isPresent()) {
String value = input.get();
System.out.println(value);
}
}
Post
public void defaultUseCase_shouldTransform(Optional<String> input) {
input.ifPresent(value -> System.out.println(value));
}
# Multiple initializes in the row
Pre
String value = "prefix" + "value" + "suffix";
public void multipleInitializers_shouldTransform(Optional<String> input) {
if (input.isPresent()) {
String value = input.get(), second = "";
System.out.println(value);
System.out.println(second);
}
}
Post
String value = "prefix" + "value" + "suffix";
public void multipleInitializers_shouldTransform(Optional<String> input) {
input.ifPresent(value -> {
String second = "";
System.out.println(value);
System.out.println(second);
});
}
# Limitations
Can not be applied if the then path of the branch contains a non-effectively final variable or contains unhandled exceptions.
🛠️ Auto-refactor Available
You can auto-refactor this with jSparrow.
Drop this button to your Eclipse IDE workspace to install jSparrow for free:
Need help? Check out our installation guide.
# Properties
| Property | Value |
|---|---|
| Rule ID | OptionalIfPresent |
| First seen in jSparrow version | 2.6.0 |
| Minimum Java version | 8 |
| Remediation cost | 2 min |