Java流的过滤器使用谓词来允许或拒绝流中的元素.
借助.compose或.andThen,可以限制过滤器.
但是,如果我想根据某些标志使它更宽松,该怎么办?
例如,我可能希望由用户参数设置isAppleAllowed和isPearAllowed.
无法使用.filter(f-> isAppleAllowed || isPearAllowed),因为如果其中一个为True,则都允许.
我可以使用什么来更宽松地扩展过滤器?
在此先感谢您的帮助.
解决方法:
您的示例没有道理.如果isAppleAllowed和isPearAllowed是布尔参数,就如它们的名称和您的散文所表明的那样,则这些变量或两者的布尔组合都不能构成谓词,您不能使用它们描述的过滤.您反而想要一些类似的东西
fruitStream.filter(f -> { return f.isApple() && isAppleAllowed; })
为苹果过滤,为梨过滤.要共同过滤,您可以使用
fruitStream.filter(f -> {
return (f.isApple() && isAppleAllowed)
|| (f.isPear() && isPearAllowed);
})
备选地,给定两个谓词Fruit.对象,例如applePredicate和pearPredicate,Predicate类提供了形成联合谓词的方法:
fruitStream.filter(applePredicate.or(pearPredicate))