Optional is not intended for the purpose of dealing with exceptions, it was intended to deal with potential nulls without breaking the flow of your program. For example:
myOptional.map(Integer::parseInt).orElseThrow(() -> new RuntimeException("No data!");
This will automatically skip the map step if the optional was empty and go right to the throw step — a nice unbroken program flow.
When you write:
myOptionalValue.orElseThrow(() -> new RuntimeException("Unavailable"));
… what you are really saying is: Return my optional value, but throw an exception if it is not available.
What you seem to want is a way to create an optional (that instantly catches the exception) and will rethrow that exception when you try using the optional.