Suppose I have a Spring Data Repository method.
Optional<Branch> findByName(@Nonnull final String name);
My business logic is such if I find any value for this method execution I would throw an exception.
I could do this for example :
Optional.of(branchRepository.findByName(branch.getName()))
.filter(bo -> !bo.isPresent())
.orElseThrow(NameNotAvailableException::new);
or another way:
Optional.of(branchRepository.findByName(branch.getName()))
.filter(Optional::isEmpty)
.orElseThrow(NameNotAvailableException::new);
I am not sure if using filter, in this case, is appropriate as my method returns Optional<Branch>
not a list.
It seems that if in JDK if there were ifPresentThrow() method was available that would serve my purpose.
Yes, this code can be written in an imperative style which I don't want. So my question is the same kind of things ifPresentThrow() can be achieved or there is a better way to do it in a functional style. Thanks in advance.
Optional is a container object used to contain not-null objects. Optional object is used to represent null with absent value. This class has various utility methods to facilitate code to handle values as 'available' or 'not available' instead of checking null values.
NoSuchElementException Exception Via orElseThrow() Since Java 10. Using the Optional. orElseThrow() method represents another elegant alternative to the isPresent()-get() pair. Sometimes, when an Optional value is not present, all you want to do is to throw a java.
Once you have created an Optional object, you can use the isPresent() method to check if it contains a non-null value. If it does, you can use the get() method to retrieve the value. Developers can also use the getOrElse() method, which will return the value if it is present, or a default value if it is not.
You'd better use "exists".
if (repository.existsByName(branchName)) {
throw ...
}
It more usefull, because it doesn't retrive the object from db, just true/false.
You can use ifPresent
with block to throw an exception
branchRepository.findByName(branch.getName()).ifPresent(s -> {
throw new NameNotAvailableException();
});
Or a simple if
block also looks cleaner
if(branchRepository.findByName(branch.getName()).isPresent()) {
throw new NameNotAvailableException();
}
Or you can create a method to just throw an exception
public void throwException(Object str) {
throw new NameNotAvailableException();
}
And then just call it
branchRepository.findByName(branch.getName()).ifPresent(this::throwException);
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With