gpt4 book ai didi

java - findAny orElse 过滤后

转载 作者:搜寻专家 更新时间:2023-11-01 01:16:06 25 4
gpt4 key购买 nike

我正在使用流过滤器 findAny.orElse,但它没有像我预期的那样工作,所以我想我不了解它的真正工作原理。这是我的代码

return Stream.of(getObjectAttributeValue(product, matchCriteria.getFieldName()))
.map(o -> isIngredientRestricted(matchCriteria, (List<String>) o))
.filter(Boolean::valueOf)
.findAny().orElse(isCommercialHierarchyInfoRestricted(product, matchCriteria));

基本上我所期望的是,如果第一个映射发出一个 boolean 值 false,那么它将被过滤,这样 findAny 将找不到任何可选的,因此将调用 orElse。但即使在过滤器中设置为真,也会调用 isCommercialHierarchyInfoRestricted。

知道我做错了什么吗?

最佳答案

你实际上需要使用 orElseGet :

.findAny().orElseGet(() -> isCommercialHierarchyInfoRestricted(product, matchCriteria));

在 Java 中,方法参数总是在方法调用之前求值,即使它在方法内部是不必要的,所以您无法避免求值 orElse 参数。这就是 orElseGet 存在的原因:它的参数是函数,并且函数在不需要时根本可以不执行。

关于java - findAny orElse 过滤后,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34588180/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com