编程语言
首页 > 编程语言> > Java过滤器,如何扩展过滤器?

Java过滤器,如何扩展过滤器?

作者:互联网

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))

标签:predicates,java-stream,filter,java,lambda
来源: https://codeday.me/bug/20191025/1927049.html