I am trying to avoid isPresent checks in my code below, but the compiler emits an error with the message
"No instance(s) of type variable(s)
Uexist so thatvoidconforms toU"
on the call to printAndThrowException. This is my code:
values.stream()
.filter(value -> getDetails(value).getName.equals("TestVal"))
.findFirst()
.map(value -> printAndThrowException(value))
.orElseThrow(new Exception2("xyz"));
The method in question printAndThrowException has the below signature:
void printAndThrowException(Pojo value)
The above method always throws an exception of type RuntimeException. The abovementioned code isn't the exact code, just transformed my code to represent the situation.
What's the problem here and how to avoid using isPresent when calling printAndThrowException?
Optional.map() expects a Function<? super T, ? extends U> as parameter. Since your method returns void, it cannot be used like this in the lambda.
I see three options here:
Void/Object/whatever instead – semantically not ideal but it would work.map(v -> {
throw printAndReturnException();
});
ifPresent(), and move the orElseThrow() outside of the call chain:
values.stream()
.filter(value -> getDetails(value).getName.equals("TestVal"))
.findFirst()
.ifPresent(value -> printAndThrowException(value))
throw new Exception2("xyz");
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