具有番石榴的对象列表中的object.attribute的最小值/最大值

时间:2014-02-21 14:08:46

标签: java guava

让我们列出Person定义为

的列表
  • 名称
  • 年龄

我希望List<Person>中的最大(年龄)。

我可以迭代这个列表并手动保持最大值:

Integer max = null;
for(Person p : list) {
  if(max == null || max < p.getAge()) {
    max = p.getAge();
  }
  return max;
}

但我觉得可能存在一种可以为我做的番石榴方法组合。如果我写一个Function<Person, Integer>,是否有一个现成的方法来从列表中获取最大值?

3 个答案:

答案 0 :(得分:4)

请参阅this回答。您可以使用Ordering.max()

Ordering<People> o = new Ordering<People>() {
    @Override
    public int compare(People left, People right) {
        return Ints.compare(left.getAge(), right.getAge());
    }
};

return o.max(list);

答案 1 :(得分:1)

你可以用Guava做到这一点,但我认为它会比你的解决方案更清晰的版本更复杂,即:

int max = -1;

for (People p : list) {
    if (p.getAge() > max)
        max = p.getAge();
}

顺便说一句,调用您的班级Person更有意义,因为它代表一个,而不是一群

答案 2 :(得分:1)

如果你有一个Function<Person, Integer>(比如说​​getAge),那就是:

Integer maxAge = Ordering.natural().max(Iterables.transform(people, getAge));