如何解决如何以命令方式改进此代码段?
下面的代码段具有访问全局变量的副作用,如何改善此代码段?
double total = 0;
for (Student s : myStudentList){
total = total + s.getSchScore();
}
System.out.println(total + " is total marks.");
解决方法
如果您愿意/能够键入列表(ArrayList<Student> myStudentList = new ArrayList<>();
),则可能的解决方案
final double total = myStudentList.stream()
.mapToDouble(Studen::getScore)
.sum();
如果您必须/想要继续使用原始类型列表(即highly discouraged),那么我建议执行另外两个步骤:过滤掉所有非Student
对象,并将这些对象转换为Student
:
final double total = ((List<?>) myStudentList).stream()
.filter(o -> o instanceof Student)
.map(o -> (Student) o)
.mapToDouble(Studen::getScore)
.sum();
,
强烈建议不要使用原始类型,因为它需要将每个Object强制转换为所需类型。
final double total = myStudentList.stream().mapToDouble(x -> ((Student) x).getStudentMark()).sum();
如果将List
声明为Student
作为类型参数,则代码将大大改善。
List<Student> myStudentList = new ArrayList<>();
//...
final double total = myStudentList.stream().mapToDouble(Student::getStudentMark).sum();
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。