Java 8过滤器基于布尔值

Nic*_*k01 6 java java-8

我希望能够根据传入的布尔值应用过滤器.

public static List<Integer> multiplyNumbers(List<Integer> input, boolean ignoreEven){

    return input.stream()
    .filter(number -> !(number%2==0))
    .map(number -> number*2)
    .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

我想根据ignoreEven标志进行过滤步骤.如果是真的,请忽略偶数.我该怎么做呢?我这样做是为了避免代码重复

Joe*_*e C 7

对我来说听起来很简单或有条件.

.filter(number -> !ignoreEven || (number % 2 != 0))
Run Code Online (Sandbox Code Playgroud)


shm*_*sel 5

如果您不想检查ignoreEven每个元素,可以有条件地定义谓词本身:

.filter(ignoreEven ? (n -> n % 2 != 0) : (n -> true))
Run Code Online (Sandbox Code Playgroud)

  • @Rogue这需要为每个元素检查`ignoreEven`.如果您有替代方案(除了JoeC),请详细说明. (2认同)
  • @Rogue我同意这不一定是一项重大改进.我只是想发布一种替代方法.如果我们真的想要性能,最好的解决方案可能是`Stream <Integer> stream = input.stream(); if(ignoreEven)stream = stream.filter(n - > n%2!= 0); 回流...`. (2认同)