首页 > 解决方案 > 从 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)然后计算它们的平均值等等。

标签: javaarraylistaveragehashset

解决方案


如果您使用的是 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,否则您将得到错误的结果。


推荐阅读