233. Returning a present Optional class or another one

Let's consider a method that returns an Optional class. Mainly, this method computes an Optional class and, if it isn't empty, then it simply returns this Optional class. Otherwise, if the computed Optional class is empty then we execute some other action that also returns Optional class.

The isPresent()-get() pair can do it as follows (this should be avoided):

private final static String BOOK_STATUS = "UNKNOWN";
...
// Avoid
public Optional<String> findStatus() {
Optional<String> status = ...; // this is prone to be empty

if (status.isPresent()) {
return status;
} else {
return Optional.of(BOOK_STATUS);
}
}

Alternatively, we should avoid such constructions as follow:

return Optional.of(status.orElse(BOOK_STATUS));
return Optional.of(status.orElseGet(() -> (BOOK_STATUS)));

The best solution has been available since with JDK 9, and it consists of the Optional.or() method. This method is capable of returning Optional describing the value. Otherwise, it returns Optional produced by the given Supplier function (the supplying function that produces Optional to be returned):

private final static String BOOK_STATUS = "UNKNOWN";
...
// Prefer
public Optional<String> findStatus() {
Optional<String> status = ...; // this is prone to be empty

return status.or(() -> Optional.of(BOOK_STATUS));
}
..................Content has been hidden....................

You can't read the all page of ebook, please click here login for view all page.
Reset
3.138.179.100