2015-05-17 2 views
0

Я пытаюсь отфильтровать объект в Гуаве. Например, у меня есть класс команда, и хотел бы получить все команды с позицией ниже 5.Фильтровать объект по его элементам

Iterable<Team> test = Iterables.filter(teams, new Predicate<Team>(){ 
     public boolean apply(Team p) { 
      return p.getPosition() <= 5; 
     } 
    }); 

я получаю 2 ошибки, предикат не может быть разрешен к типу и методы фильтру (Iterable, предикат) в типе Iterables не применимо для аргументов (Список < 'Team'>, новый Predicate < 'Team'>() {}).

Я могу фильтровать Iterables типа Integer.

Iterable<Integer> t6 = Iterables.filter(set1, Range.open(0, 3)); 

Как фильтровать объект на основе его элементов в Гуаве? Я хочу использовать эту библиотеку в моем проекте Android и иметь множество условий фильтрации. Может ли он использоваться для объектов класса или это только для простых типов данных?

+0

Его можно использовать для любых объектов, и вы импортировали Predicate из com.google.common.base? –

+0

Да предикат также был импортирован в банку гуавы. –

+0

Привет, Луис. Вы были правы. Я импортировал только Предикаты, а не Предикат. Пожалуйста, оставьте ответ, чтобы я мог отметить его как правильно. –

ответ

0

В этом примере вам нужна переменная final, как range.

Это способ фильтрации с использованием внешних параметров, Predicate - это внутренний класс.

final Range range = new IntRange(0, 3); 

Iterable<Team> test = Iterables.filter(teams, new Predicate<Team>() { 
    public boolean apply(Team p) { 
     return range.containsInteger(p.getPosition()); 
    } 
}); 
Смежные вопросы