java - 从 HashSet 类型的 arrayList 中计算每个列表的平均值
问题描述
我有一个ArrayList
类型HashSet
ArrayList<HashSet<E>> array = new ArrayList<>();
每个键array.get(0)
都有一个类型列表HashSet
array.get(0) = [1895, 1959, 2023, 2087, 1960]
array.get(1) = [2277, 2213, 2278, 2214]
现在我想从arraylist中取出每个列表并添加它们然后取平均值。
这意味着例如
int sum = 0, avg = 0;
for(int i = 0 ; i < array.size() ; i++){
for(int j = 0 ; j < array.get(i).size() ; i++){
sum += array.get(i).get(j); // this is of course wrong
}
avg = sum / array.get(i).size();
System.out.println("avg of list " + i + "is : " + avg);
}
如何做到这一点我建议有另一个整数类型的数组列表,然后添加数字array.get(0)
然后计算平均值然后清除数组,然后添加数字array.get(1)
然后计算它们的平均值等等。
解决方案
如果您使用的是 Java 8+,它可能会更好:
array.stream()
.mapToDouble(set ->
set.stream().mapToInt(Integer::intValue).average().orElse(0)
)
.forEach(System.out::println);
输出
1984.8
2245.5
在您的解决方案中,您尝试从 HashSet 获取元素,get(index)
但这不正确,您必须使用 Iterator 查看此 QA,Getting an element from a Set,或者您可以for (Integer e : array.get(i))
像这样使用:
for (int i = 0; i < array.size(); i++) {
int sum = 0;
for (Integer t : array.get(i)) {
sum += t;
}
double avg = sum / array.get(i).size();
System.out.println("avg of list " + i + "is : " + avg);
}
请注意,sum 和 avg 变量应在每次迭代中重新分配为 0,否则您将得到错误的结果。
推荐阅读
- r - 重新格式化 R 数据框中的数据集
- python - “加入”对象没有“执行”属性
- flutter - 使用 flutter_local_notifications 安排通知
- python - 某些使用 BeautifulSoup 和 Requests 的网站缺少 URL
- android - 设置android视图位置没有效果
- three.js - 每个实例具有唯一纹理的 InstancedMesh
- python - 这些简单的 Python 函数是如何工作的?
- javascript - 我的动态 Ajax 站点因多个 getScript 调用而过载
- python - 如何在一定时期后保存 TensorFlow 模型?
- php - 从 Web 界面启动 PHP 守护程序