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

发布于 2025-01-11 05:39:00 字数 769 浏览 0 评论 0原文

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

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:我只提供了代码,因为我认为不需要在这里发布所有其他类只是为了回顾这个类。

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

I write this code to find the youngest person:

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);
    }
}

As you can see I did it and is working correctly . Now I want to know if I can do this in a better way (maybe instead of having 2 "statements" to go done to only one?)
PS: I provided only the code since I assume that there is no need to post all the other classes in here just to review this one only.

Can someone explain me what can be done to have a better code(less lines)?
Thanks

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

听不够的曲调 2025-01-18 05:39:00

只需删除 map() 并让您的比较器对 Person 进行年龄查找:

return personList.stream()
        .min(Comparator.comparingInt(Person::getAge))
        .orElse(null);

如果您知道列表非空,最好通过调用 < code>get() 或 orElseThrow() 而不是 orElse()。或者,您可以使用 Collections 帮助器代替流:

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

顺便说一下,当您已经拥有流时,调用 .toList().stream() 是完全没有意义的。对 Integer 调用 Integer::valueOf 也是没有意义的。

Just cut out the map() and have your comparator do the age lookup on Person:

return personList.stream()
        .min(Comparator.comparingInt(Person::getAge))
        .orElse(null);

If you know the list is non-empty, better to make that explicit by calling get() or orElseThrow() instead of orElse(). Or you can use the Collections helper instead of streams:

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

By the way, calling .toList().stream() when you already have a stream is completely pointless. There's also no point in calling Integer::valueOf on an Integer.

淡淡の花香 2025-01-18 05:39:00

不要绘制年龄。不必仅仅为了查找结构内整数的最小值而进行析构。

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

Don't map out the ages. It is not necessary to destruct just for finding the minimun value of an integer inside the struct.

    return personList.stream()
            .min(Comparator.comparingInt(o -> o.age))
            .orElse(null);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文