2015-01-22 2 views
0

Я знаю основу предикатов и понять ниже кода копируется из 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); 

Но можно получить итератор для элементов, которые не соответствуют предикату (без изменения коды предиката)?

+0

Вы можете создать предикат отрицания, а именно: 'not isEven'. –

ответ

8

Использование Predicates#not(Predicate).

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

Удивительно, что мне нужно. –

+0

@stuart Ха-ха, да. Благодаря! –

0

Вы можете попробовать:

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

Iterators.removeIf(Iterator, Predicate) 

можете найти более подробную информацию here.

Смежные вопросы