过滤时获取谓词的反转?

时间:2015-01-22 16:38:33

标签: java collections guava

我了解谓词的基础知识,并了解从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);

但是,是否可以为与谓词不匹配的项获取可迭代(不更改谓词代码)?

2 个答案:

答案 0 :(得分:8)

使用Predicates#not(Predicate)

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

答案 1 :(得分:0)

您可以尝试:

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

Iterators.removeIf(Iterator, Predicate)

可以找到更多信息here