以结构化方式操作java List <object>中的数据</object>

时间:2014-05-25 21:31:48

标签: java object

我有以下课程:

class Students{
  int age; 
  int dept;
}

假设我有一个List<Students>,我想通过简单的计算操作列表:计算mean,计算中间值(例如(年龄+债务)/ 2),找到最接近均值的值,依此类推。我怎样才能以结构化的方式做到这一点?我希望能够在列表中使用不同的组合。例如计算年龄均值//根据年龄/债务计算中间值的平均值,找出最接近的年龄值等。

我该如何处理?如果有人能指出我正确的方向,我将不胜感激。

3 个答案:

答案 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)
}

现在用你的钱来做点什么。