我有两种方法来获得女性的平均年龄,第二种方法是获得男性的平均年龄。我需要做一种方法来协调这两种方法。
这个方法作为第一个参数应该有人的列表,作为第二个参数函数,它将决定我们是在寻找男性还是女性的平均年龄。
这是我的方法:
public double getMenAverageAge(List<Person> personList){
return Optional.ofNullable(personList)
.orElseGet(ArrayList::new)
.stream()
.filter(Objects::nonNull)
.filter(p -> !Boolean.parseBoolean(String.valueOf(p.getFirstName().endsWith("a"))))
.mapToDouble(Person::getAge)
.average()
.orElse(0);
}
public double getAverageWomenAge(List<Person> personList){
return Optional.ofNullable(personList)
.orElseGet(ArrayList::new)
.stream()
.filter(Objects::nonNull)
.filter(p-> Boolean.parseBoolean(String.valueOf(p.getFirstName().endsWith("a"))))
.mapToDouble(Person::getAge)
.average()
.orElse(0);
}
有什么想法吗?
Predicate<Person> p = p-> Boolean.parseBoolean(String.valueOf(p.getFirstName().endsWith("a")));
Predicate<Person>
只是一种类型。以上与CCD_ 2没有太大区别。您可以创建一个方法,接受该类型作为param:
public double getAverageAge(List<Person> list, Predicate<Person> filter) {
return list
.stream()
.filter(filter)
.mapToDouble(Person::getAge)
.average()
.orElse(0);
注意:你有null tourette,这是一个编写大量无法测试的代码的公式。不要这么做。喜欢NPE。对于有人调用此方法为列表传递null
的正确响应是使用NPE崩溃:null最好被视为"未设置"/"未知",并且不可能获得未知列表的平均年龄。答案不是0。答案是(ツ)/。
同样,如果某个null
以某种方式进入了你的人员列表,那么这个人的年龄也是未知的。当其中一个人完全未知时,不可能确定一批人的平均年龄,同样,NPEing实际上是正确的反应。
在java中处理null的最好方法是使用对您有利的工具:如果NullPointerException实际上是可能发生的最好的事情,那么您做得对。