【问题标题】:Get reverse of predicate when Filtering?过滤时获得谓词的反转?
【发布时间】:2015-01-22 16:38:33
【问题描述】:

我了解谓词的基础知识并理解以下从this question复制的代码

Predicate<Integer> isEven = new Predicate<Integer>() {
    @Override public boolean apply(Integer number) {
        return (number % 2) == 0;
    }               
};
Iterable<Integer> evenNumbers = Iterables.filter(numbers, isEven);

但是是否有可能获得与谓词不匹配的项目的迭代(不更改谓词代码)?

【问题讨论】:

  • 你可以创建一个否定谓词,即not isEven

标签: java collections guava


【解决方案1】:

使用Predicates#not(Predicate)

Iterable<Integer> oddNumbers = Iterables.filter(numbers, Predicates.not(isEven));

【讨论】:

  • 太棒了,正是我需要的。
  • @stuart 哈哈,是的。谢谢!
【解决方案2】:

你可以试试:

removeIf(Iterable, Predicate) -->   Removes all elements satisfying the predicate, using the Iterator.remove() method.  

Iterators.removeIf(Iterator, Predicate)

可以找到更多信息here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多