首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >java 8流中的IfPresentOrElse场景

java 8流中的IfPresentOrElse场景
EN

Stack Overflow用户
提问于 2020-08-12 06:31:27
回答 1查看 744关注 0票数 0

我有一个使用嵌套流的场景。PFB守则:

代码语言:javascript
复制
    list.parallelStream()
        .filter(item -> productList.parallelStream()
            .anyMatch(product -> product.getProductName().equals(item.getProductName())
                 && item.getQuantity() <= product.getAvailableQuantity()));

在这里,我试图过滤出基于productnames的工作非常好,但我需要添加一个其他条件的任何匹配。如果没有找到匹配,我需要抛出一个错误的“产品没有找到”。我试着使用ifPresentOrElse,但是它使用Consumer接口作为参数,它返回void(但在我的例子中,它必须返回一个布尔值)。任何帮助都是非常感谢的。

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-08-12 06:37:54

您可以使用orElseThrow

代码语言:javascript
复制
orElseThrow(ProductNotFoundException::new)

不能将orElseThrow()anyMatch()一起使用,因为它返回布尔值。您可以在findAny()上使用filter(),这将返回Optional,然后可以使用Optional上的orElseThrow()抛出异常。

例如:

代码语言:javascript
复制
 list.parallelStream()
        .filter(item -> productList.parallelStream()
            .anyMatch(product -> product.getProductName().equals(item.getProductName())
                 && item.getQuantity() <= product.getAvailableQuantity()))
        .findAny().orElseThrow(ProductNotFoundException::new);

编辑

OP想要在第一个找不到的产品上抛出错误。

代码语言:javascript
复制
        list.parallelStream()
                .filter(item -> {
                    if (productList.parallelStream().anyMatch(product -> product.getProductName().equals(item.getProductName())
                                    && item.getQuantity() <= product.getAvailableQuantity())) {
                        return true;
                    } else {
                        throw new ProductNotFoundException();
                    }
                });

为流添加要执行的终端操作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63371040

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档