gpt4 book ai didi

java - 使用java 8 Stream分割ArrayList并进行统计

转载 作者:太空宇宙 更新时间:2023-11-04 11:41:11 24 4
gpt4 key购买 nike

我有以下对象的 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 中,我必须有 Final,而我的变量 FROM、TO 则不是
- 我将在分区上循环 4 次,以在选项 #2 中查找完整的统计信息

非常感谢您帮助我进行过滤并找到一些快速统计的好主意

最佳答案

我确实发现这很有帮助http://www.oracle.com/technetwork/articles/java/architect-streams-pt2-2227132.html

所以我确实在点对象中创建了新方法

public Integer whichPart(double min, double step, int axe) {
return new Integer((int) ((position[axe] - min) / step));
}

稍后,准备一些数据

ds = body.parallelStream().mapToDouble(Bod::y).summaryStatistics();
min = ds.getMin();
step = (ds.getMax() - min) / 12; // I want 12 subareas

然后分组

Map<Integer, List<Bod>> rozdeleneBody = body.parallelStream()
.collect(Collectors.groupingBy(b->b.whichPart(min,step,1)));

现在也许我会循环分组列表或者创建自定义收集器

关于java - 使用java 8 Stream分割ArrayList并进行统计,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42764827/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com