最简洁的方法来获取集合<a></a>中的max(A.x)

时间:2014-04-09 09:48:40

标签: java java-8 java-stream

我有一个使用这些属性定义的类Person

private String name;
private String surname;
private Date birthday;

我希望以Collection<Person>获得生日的最大值。

Java 7 中,没有外部库,我会这样做:

public Date maxAgeJava7(Collection<Person> persons) {
  Date max = null;
  for (Person person : persons) {
    if (max == null || person.getBirthday().after(max)) {
      max = person.getBirthday();
    }
  }
  return max;
}

现在,在 Java 8 中,可以这样写:

public Date maxAgeJava8(Collection<Person> persons) {
  return persons.stream().map(Person::getBirthday).max((Date d1, Date d2)-> d1.compareTo(d2)).get();
}

这好多了但是我不喜欢这部分:

(Date d1, Date d2)-> d1.compareTo(d2)

作为日期implements Comparable,有没有办法告诉Java使用compareTo()方法,而不必明确地写它?

1 个答案:

答案 0 :(得分:5)

max需要Comparator作为参数。

我认为您可以做的最简单的事情是使用方法引用调用方法compareTo

public Date maxAgeJava8(Collection<Person> persons) {
    return persons.stream().map(Person::getBirthday).max(Date::compareTo).get();
}

另请注意,您无需使用Stream即可完成此操作。您只需使用Collections.max提供自定义比较器:

public Date maxAgeJava8(Collection<Person> persons) {
    return Collections.max(persons, Comparator.comparing(Person::getBirthday)).getBirthday();
}
相关问题