必须使用"orElseThrow"的返回值

Baj*_*aik 10 java java-8 sonarqube

当我使用声纳lint扫描代码时,以下代码显示错误为"必须使用"返回值"orElseThrow"

itemList.stream()
    .filter(item -> orderItemId.equals(item.getId()))
    .findAny()
    .orElseThrow(() -> new BadRequestException("12345","Item Not Found"));
Run Code Online (Sandbox Code Playgroud)

这仅用于验证目的,无需从此语句返回任何内容.需要验证项目是否存在.

仅供参考:Eclipse显示快速修复鱿鱼:S2201

任何人都知道如何解决这个错误?

Era*_*ran 14

我假设这是一个警告(不使用返回的值orElseThrow()不应该是一个错误).

如果您希望消除该警告,请isPresent()改用:

if (!itemList.stream().filter(i->orderItemId.equals(i.getId())).findAny().isPresent()) {
    throw new BadRequestException("12345","Item Not Found");
}
Run Code Online (Sandbox Code Playgroud)

或者只是避免使用Optionals,anyMatch()而是使用:

if (!itemList.stream().anyMatch(i->orderItemId.equals(i.getId()))) {
    throw new BadRequestException("12345","Item Not Found");
}
Run Code Online (Sandbox Code Playgroud)

  • 对于第一个解决方案,我相信你正在寻找`!itemList.stream().filter(i-> orderItemId.equals(i.getId())).findAny().isPresent()`但更好的解决方案是使用`itemList.stream().noneMatch(i-> orderItemId.equals(i.getId()))` (6认同)
  • 我的观点是,这不是一个仅因为误报警告而使用简单的“orElseThrow”将代码更改为其他内容的解决方案。 (5认同)
  • ...并首先使用`noneMatch`消除*logical not*. (4认同)