web-dev-qa-db-ja.com

「orElseThrow」の戻り値を使用する必要があります

ソナーlintを使用してコードをスキャンすると、次のコードは「 "orElseThrow"の戻り値を使用する必要がある」としてバグを示します。

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

これは検証目的のためだけであり、このステートメントから何かを返す必要はありません。アイテムが存在するかどうかを検証する必要があります。

参考:Eclipseがsquidとしてクイックフィックスを表示:S2201

誰でもこのバグを解決する方法を知っていますか?

11
Baji Shaik

これは警告であると想定しています(orElseThrow()によって返された値を使用しないことはエラーになりません)。

その警告を取り除きたい場合は、代わりにisPresent()を使用してください:

_if (!itemList.stream().filter(i->orderItemId.equals(i.getId())).findAny().isPresent()) {
    throw new BadRequestException("12345","Item Not Found");
}
_

または、Optionalsの使用を避け、代わりにanyMatch()を使用します。

_if (!itemList.stream().anyMatch(i->orderItemId.equals(i.getId()))) {
    throw new BadRequestException("12345","Item Not Found");
}
_
13
Eran