流中的条件过滤器

问题描述 投票:0回答:2

我对某些List<a> listOfA执行了以下几个过滤步骤:

listOfA.stream()
    .filter(methodAWithPredicate(someArg))
    .filter(methodBWithPredicate(someArg))
    .filter(methodCWithPredicate(someArg))
    .collect(Collectors.toList());

但是,我希望第二个过滤器是有条件的;即,仅在满足某些条件(例如x> 0)时才应使用该方法。在上面的代码中内联执行此操作的好方法是什么,而不必像下面那样制作整个if-else块:

if (x>0) {
    return listOfA.stream()
            .filter(methodAWithPredicate(someArg))
            .filter(methodBWithPredicate(someArg))
            .filter(methodCWithPredicate(someArg))
            .collect(Collectors.toList());
} else {
    return listOfA.stream()
            .filter(methodAWithPredicate(someArg))
            .filter(methodCWithPredicate(someArg))
            .collect(Collectors.toList());
}
java stream java-stream
2个回答
0
投票
您可以使用三元运算符

return listOfA.stream() .filter(methodAWithPredicate(someArg)) .filter(methodBWithPredicate(someArg)) .filter(x > 0 ? methodCWithPredicate(someArg) : a -> true) .collect(Collectors.toList());


0
投票

选项1:

© www.soinside.com 2019 - 2024. All rights reserved.