Java 8过滤器基于布尔值

时间:2017-07-25 22:34:06

标签: 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());
}

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

5 个答案:

答案 0 :(得分:7)

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

.filter(number -> !ignoreEven || (number % 2 != 0))

答案 1 :(得分:5)

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

.filter(ignoreEven ? (n -> n % 2 != 0) : (n -> true))

答案 2 :(得分:0)

您可以将条件传递到multiply(...)方法并将其传递到filter,如下所示。

multiplyNumbers(Arrays.asList(1, 2, 3, 4, 5), (x) -> x % 2 != 0).forEach(System.out::println);

public static List<Integer> multiplyNumbers(List<Integer> input,    
                                            Predicate<Integer> filterCondition){

     return input.stream()
                        .filter(filterCondition)
                        .map(number -> number*2)
                        .collect(Collectors.toList());
}

答案 3 :(得分:0)

您可以定义两个额外的辅助方法,并使用or()方法组合它们:

private static Predicate<Integer> ignoringEven(boolean ignoreEven) {
    return number -> !ignoreEven;
}

private static Predicate<Integer> ignoringOdd() {
    return number -> (number % 2 != 0);
}

最终结果:

return input.stream()
      .filter(ignoringEven(ignoreEven).or(ignoringOdd()))
      .map(number -> number * 2)
      .collect(Collectors.toList());

答案 4 :(得分:0)

您可以使用anyMatch方法:

return swiftTemplateList.stream()
    .map(swiftTemplate -> swiftTemplate.getName())
    .anyMatch(name -> name.equalsIgnoreCase(messageName));
相关问题