如何获取最小 属性 的列表元素?

How to get list element with minimal property?

我写这段代码是为了寻找最年轻的人:

import java.util.Comparator;
import java.util.List;

public class PersonImpl implements PersonInterface {

    @Override
    public Person youngest(List<Person> personList) {
        Integer minAge = personList.stream()
                .map(Person::getAge)
                .min(Comparator.comparing(Integer::valueOf))
                .orElse(null);
        return personList.stream()
                .filter(person -> person.getAge() == minAge)
                .toList()
                .stream()
                .findFirst()
                .orElse(null);
    }
}

如您所见,我做到了并且工作正常。现在我想知道我是否能以更好的方式做到这一点(也许不是让 2 个“语句”只对一个完成?) PS: 我只提供了代码,因为我认为没有必要 post 这里的所有其他 类 只是为了审查这个。

有人可以向我解释如何才能拥有更好的代码(更少的行)吗? 谢谢

只需删除 map() 并让您的比较器在 Person:

上进行年龄查找
return personList.stream()
        .min(Comparator.comparingInt(Person::getAge))
        .orElse(null);

如果您知道列表是 non-empty,最好通过调用 get()orElseThrow() 而不是 orElse() 来明确表示。或者您可以使用 Collections 帮助器代替流:

return Collections.min(personList, Comparator.comparingInt(Person::getAge));

顺便说一句,当您已经有一个流时调用 .toList().stream() 是完全没有意义的。在 Integer.

上调用 Integer::valueOf 也没有意义

不要map超出年龄。没有必要仅仅为了找到结构中整数的最小值而进行析构。

    return personList.stream()
            .min(Comparator.comparingInt(o -> o.age))
            .orElse(null);