我编写这段代码来找到最年轻的人:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我做到了并且工作正常。现在我想知道我是否可以以更好的方式做到这一点(也许不是只对一个执行 2 个“语句”?) PS:我只提供了代码,因为我认为不需要发布所有的这里的其他课程只是为了回顾这一课程。
有人可以解释一下如何才能拥有更好的代码(更少的行)吗?谢谢
只需删除map()
并让您的比较器进行年龄查找Person
:
return personList.stream()
.min(Comparator.comparingInt(Person::getAge))
.orElse(null);
Run Code Online (Sandbox Code Playgroud)
如果您知道列表非空,最好通过调用get()
ororElseThrow()
而不是 来明确这一点orElse()
。或者您可以使用Collections
助手而不是流:
return Collections.min(personList, Comparator.comparingInt(Person::getAge));
Run Code Online (Sandbox Code Playgroud)
顺便说一句,.toList().stream()
当你已经有一个流时调用是完全没有意义的。Integer::valueOf
调用也没有任何意义Integer
。