如何以命令方式改进此代码段?

问题描述

下面的代码段具有访问全局变量的副作用,如何改善此代码段?

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

Ideone demo

如果您必须/想要继续使用原始类型列表(即highly discouraged),那么我建议执行另外两个步骤:过滤掉所有非Student对象,并将这些对象转换为Student

final double total = ((List<?>) myStudentList).stream()
    .filter(o -> o instanceof Student)
    .map(o -> (Student) o)
    .mapToDouble(Studen::getScore)
    .sum();

Ideone Demo

,

强烈建议不要使用原始类型,因为它需要将每个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();

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...