2015-05-17 72 views
0

我想过滤番石榴的一个对象。比如我有一个一流的团队,并希望得到所有位置的团队到低于5其成员过滤对象

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

我得到2个错误,谓语不能被解析为一个类型和方法过滤器(可迭代,谓语)在Iterables类型中不适用于参数(列表<'Team'>,新Predicate <'Team'>(){})。

我可以过滤Integer类型的Iterables。

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

我如何过滤基于它的成员在番石榴的对象?我想在我的android项目中使用这个库,并有许多过滤条件。它可以用于类对象还是仅用于简单的数据类型?

+0

它可以用于任何对象,并且您是否从com.google.common.base导入了Predicate? –

+0

是的谓词也被导入到了番石榴罐子里。 –

+0

嗨路易斯..你说得对。我只导入了Predicates而不是Predicate。请留下一个答案,以便我可以将其标记为正确。 –

回答

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