【发布时间】:2017-08-03 12:57:06
【问题描述】:
我有以下对象的 ArraList:
public class Point {
private double[] position; // hold x y z coordinate
private double[] velocity; // hold velocity vector
private double value; // some value
/*
* setters, geters another calculations ...
*/
}
我需要根据 Point.position[0] 将这些点分成 10 个区域。在每个区域,我想计算平均速度并找出位置 [2] 的最小值/最大值。
那么分区有多大:
body = new ArrayList<>(); // array of points, filled from file
DoubleSummaryStatistics ds = body.parallelStream().mapToDouble(Point::x).summaryStatistics();
step = (ds.getMax() - ds.getMin()) / 10; // let's say I want 10 subareas
from = ds.getMin();
to = from + krok;
我的想法是循环并过滤点并进行统计
List<Point> subArea;
for (int i = 0; i < kolkoUsekov; i++) {
subArea = body.parallelStream().filter(b -> from<=b.y && b.y<to).collect(Collectors.toList());
// do statistics
// #1
subArea.forEach(...);
// or #2
DoubleSummaryStatistics ds = subArea.parallelStream().mapToDouble(Point::z).summaryStatistics();
ds = subArea.parallelStream().mapToDouble(Point::velocityX).summaryStatistics();
ds = subArea.parallelStream().mapToDouble(Point::velocityY).summaryStatistics();
ds = subArea.parallelStream().mapToDouble(Point::velocityZ).summaryStatistics();
/* ... */
// print statistics
from += krok;
to += krok;
}
问题:
- 在 lambda 中,我必须有最终变量,而我的变量 FROM、TO 不是
- 我将在分区上循环 4 次以在选项 #2 中找到完整的统计信息
非常感谢您帮助我过滤并找到一些快速统计的好主意
【问题讨论】:
标签: java filter java-8 statistics java-stream