我有以下课程:
class Students{
int age;
int dept;
}
假设我有一个List<Students>
,我想通过简单的计算操作列表:计算mean
,计算中间值(例如(年龄+债务)/ 2),找到最接近均值的值,依此类推。我怎样才能以结构化的方式做到这一点?我希望能够在列表中使用不同的组合。例如计算年龄均值//根据年龄/债务计算中间值的平均值,找出最接近的年龄值等。
我该如何处理?如果有人能指出我正确的方向,我将不胜感激。
答案 0 :(得分:0)
您可以创建一个单独的类(StudentCalculator),它需要一个学生列表(可能在构造函数中传递List)并让实例方法在List上执行计算。
或者您可以创建一个实用程序(例如StudentCalculatorUtility),您可以在其中定义一系列接受学生列表作为参数的方法,这些方法将执行学生所需的所有计算(中间值,最接近意思是等。)
答案 1 :(得分:0)
Apache Math有一个很好的描述性统计软件包,可以完成这项工作。
http://commons.apache.org/proper/commons-math/userguide/stat.html#a1.2_Descriptive_statistics
如果您正在使用Java 8,这适用于Lambdas:
DescriptiveStatistics stats = new DescriptiveStatistics();
students.forEach(s -> stats.add(s.age));
double mean = stats.getMean();
并过滤等:
//Only students with an age > 18
students.stream.filter(s -> s.age > 18).forEach(s -> stats.add(s.age));
如果您不使用Java 8,那么只需简单地进行操作即可。
答案 2 :(得分:0)
有一个概念,您可以逐步浏览列表并依次对每个项目执行操作,这可能会也可能不会更改项目。
在这种情况下,您需要一个方法,从列表中获取一些项目并返回一个运行总计。
int sumItems(Student stu, int sum){
return (stu.age + stu.debt)/2;
}
要使用此方法,请使用forEach或迭代器。
Iterator itr = Students.iterator(); // assuming List<Student> Students = new List<Student>()
int sum = 0;
while(itr.hasnext()){
sum = sumItems(itr.next(), sum)
}
现在用你的钱来做点什么。