【发布时间】:2016-04-07 21:22:06
【问题描述】:
我正在使用流过滤器findAny.orElse,但它没有按我预期的那样工作,所以我想我不明白它是如何工作的。
这是我的代码
return Stream.of(getObjectAttributeValue(product, matchCriteria.getFieldName()))
.map(o -> isIngredientRestricted(matchCriteria, (List<String>) o))
.filter(Boolean::valueOf)
.findAny().orElse(isCommercialHierarchyInfoRestricted(product, matchCriteria));
基本上我所期望的是,如果第一个映射发出布尔值 false,那么它将是过滤器,因此 findAny 将找不到任何可选的,因此将调用 orElse。但即使在过滤器中有一个 true ,也会调用 isCommercialHierarchyInfoRestricted。
知道我做错了什么吗?
【问题讨论】:
-
orElse被调用还是isCommercialHierarchyInfoRestricted被调用? -
.map(…).filter(Boolean::valueOf)看起来很荒谬。为什么不首先使用.filter(…),即.filter(o -> isIngredientRestricted(matchCriteria, (List<String>) o))? -
@zeroflagL isCommercialHierarchyInfoRestricted 被调用。也许这里的主要问题是我不应该使用 Stream
-
哦,我明白了。您希望将
boolean结果作为整体结果。
标签: java java-8 java-stream optional