首页 > 解决方案 > 从 ArrayList 中删除异常值

问题描述

我得到了一个带有一些不一致值的 Arraylist,我想要实现的是获取列表的平均值而不计算异常高或低的值。

IE

值:20,25,22,24,18,135,25,17,19,1000

我想要达到的结果是 20,25,22,24,18,25,17,19 的平均值。列表也可以以“异常”值开头。

我如何使用 Java 来获得所需的值?

标签: javaarraylist

解决方案


我假设您知道您的案例正常和异常的阈值。我假设 6 到 999 之间的值是“正常的”,而其他一切都是异常的。

使用 Java 流:

ArrayList<Integer> values = ...
double average = values.stream().mapToInt(i -> i).filter(i -> i < 1000).filter(i -> i > 5)
            .average().getAsDouble();

使用 for 循环:

ArrayList<Integer> values = null;

long sum = 0;
int count = 0;
for (Integer i : values) {
    if (i > 5 && i < 1000) {
        sum += i;
        count++;
    }
}
double average = (double) sum / count;

推荐阅读