我想使用Stream库重写以下代码(allPeople
是List<Person>
)。
int maxYear = Integer.MIN_VALUE;
Person oldest = null;
for (Person p : allPeople) {
if (p.getDateOfDeath() > maxYear) {
oldest = p;
maxYear = p.getDateOfDeath();
}
}
我试图在人员列表中找到最老的人(假设Person对象上没有Age属性,这只是一个例子)。
如何使用Java 8重写此内容?
答案 0 :(得分:3)
Person oldest = allPeople.stream().max(comparingInt(Person::getDateOfDeath)).orElse(null);
此代码创建一个Person of Stream,并在比较死亡日期时选择max元素。这是通过使用Comparator.comparingInt(keyExtractor)
来完成的,其中密钥提取器是对人员死亡日期的方法参考。
如果列表为空,则返回null
。
如评论中所述,您也可以使用Collections.max
但请注意,如果列表为空,则会抛出NoSuchElementException
,因此我们需要在此之前处理:
Person oldest = allPeople.isEmpty() ? null : Collections.max(allPeople, comparingInt(Person::getDateOfDeath));