【问题标题】:Filter object by its members按其成员过滤对象
【发布时间】:2015-07-29 08:09:42
【问题描述】:

我正在尝试过滤 Guava 中的对象。例如,我有一个班级团队,希望获得所有排名低于 5 的团队。

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

我遇到 2 个错误,Predicate 无法解析为类型,并且 Iterables 类型中的方法 filter(Iterable, Predicate) 不适用于参数 (List , new Predicate(){})。

我能够过滤 Integer 类型的 Iterables。

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

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

【问题讨论】:

  • 它可以用于任何对象,您是否从 com.google.common.base 导入了 Predicate?
  • yes 谓词也已导入到 guava jar 中。
  • 嗨路易斯..你是对的。我只导入了谓词而不是谓词。请留下答案,以便我将其标记为正确。
  • Iterable&lt;Integer&gt; t6 = Iterables.filter(set1, Range.open(0, 3)); 的意义何在? (你的代码没有编译)

标签: guava


【解决方案1】:

在此示例中,您需要一个 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());
    }
});

【讨论】:

    猜你喜欢
    • 2011-01-03
    • 2018-01-31
    • 1970-01-01
    • 2022-01-18
    • 2018-04-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多