我有一个使用嵌套流的场景。PFB守则:
list.parallelStream()
.filter(item -> productList.parallelStream()
.anyMatch(product -> product.getProductName().equals(item.getProductName())
&& item.getQuantity() <= product.getAvailableQuantity()));在这里,我试图过滤出基于productnames的工作非常好,但我需要添加一个其他条件的任何匹配。如果没有找到匹配,我需要抛出一个错误的“产品没有找到”。我试着使用ifPresentOrElse,但是它使用Consumer接口作为参数,它返回void(但在我的例子中,它必须返回一个布尔值)。任何帮助都是非常感谢的。
谢谢。
发布于 2020-08-12 06:37:54
您可以使用orElseThrow。
orElseThrow(ProductNotFoundException::new)不能将orElseThrow()与anyMatch()一起使用,因为它返回布尔值。您可以在findAny()上使用filter(),这将返回Optional,然后可以使用Optional上的orElseThrow()抛出异常。
例如:
list.parallelStream()
.filter(item -> productList.parallelStream()
.anyMatch(product -> product.getProductName().equals(item.getProductName())
&& item.getQuantity() <= product.getAvailableQuantity()))
.findAny().orElseThrow(ProductNotFoundException::new);编辑:
OP想要在第一个找不到的产品上抛出错误。
list.parallelStream()
.filter(item -> {
if (productList.parallelStream().anyMatch(product -> product.getProductName().equals(item.getProductName())
&& item.getQuantity() <= product.getAvailableQuantity())) {
return true;
} else {
throw new ProductNotFoundException();
}
});为流添加要执行的终端操作。
https://stackoverflow.com/questions/63371040
复制相似问题