从类型为HashSet的arrayList计算每个列表的平均值

时间:2018-05-01 13:43:39

标签: java arraylist average hashset

我有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);
}

怎么做 我建议使用另一个类型为整数的arraylist,然后添加array.get(0)中的数字,然后计算平均值然后清除数组,然后添加array.get(1)中的数字,然后计算它们的平均值等等。

4 个答案:

答案 0 :(得分:1)

如果您使用的是Java 8+,那可能会更好:

array.stream()
     .mapToDouble(set -> 
         set.stream().mapToInt(Integer::intValue).average().orElse(0)
     )
     .forEach(System.out::println);

<强>输出

1984.8
2245.5

在您的解决方案中,您尝试使用get(index)从HashSet获取元素,但这不正确,而是您必须使用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,否则你会得到错误的结果。

答案 1 :(得分:0)

这样的事情怎么样:

for(int i = 0 ; i < array.size() ; i++){
    int sum = 0, avg = 0;
    for(E e : array.get(i)){
        sum += e;
    }
    avg = sum / array.get(i).size();
    System.out.println("avg of list " + i + "is : " + avg); }
}

答案 2 :(得分:0)

为什么不使用每个循环,以使其更清晰?

int sum = 0, avg = 0, count = 0;
for (HashSet<Integer> set: array) {
   for (Integer element: set) {
       sum += element;
       count++;
   }
}
avg = sum/count;

答案 3 :(得分:0)

E型究竟是什么?

如果它是Integer类型,那么它将如下所示:

    for(int i = 0; i < array.size(); i++)
    {
        int sum = 0;
        for(Integer e : array.get(i))
        {
            sum += e;
        }
        double avg = sum / array.get(i).size();
        System.out.println("Average of list" + i + "is : " + avg);
    }