如何获取最小 属性 的列表元素?
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);
我写这段代码是为了寻找最年轻的人:
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);