【发布时间】:2022-01-24 11:41:52
【问题描述】:
我试图避免 isPresent 检查下面的代码,但编译器会发出错误消息
“不存在类型变量
U的实例,因此void符合U”
致电printAndThrowException。这是我的代码:
values.stream()
.filter(value -> getDetails(value).getName.equals("TestVal"))
.findFirst()
.map(value -> printAndThrowException(value))
.orElseThrow(new Exception2("xyz"));
有问题的方法 printAndThrowException 具有以下签名:
void printAndThrowException(Pojo value)
上述方法总是抛出RuntimeException 类型的异常。上述代码不是确切的代码,只是将我的代码转换为代表情况。
这里有什么问题以及在调用printAndThrowException时如何避免使用isPresent?
【问题讨论】:
-
您必须提供更多关于变量类型 (
values) 以及流管道中的每个步骤返回什么以及在哪个步骤中出现此错误的详细信息 -
orElseThrow应该带一个供应商。所以,它将是.orElseThrow(() -> new Exception2(..)) -
@user7 :添加了更多详细信息。此外,orElseThrow 没有显示任何错误,错误在于调用 printAndThrowException。
-
map()用于将一个值convert 转换为另一个值——这里不是这种情况——这个用例似乎更像ifPresentOrElse()的情况(Java 9 或更高版本) -
@MCEmperor 我意识到在 ifPresent 中调用该方法并在调用位置本身抛出异常会更干净:)
标签: java functional-programming java-stream optional