如何使用类库工具对Java ArrayList元素执行简单统计运算
解决方案
方法1:JDK 8+ 内置Stream API(无额外依赖,推荐)
JDK自带的Stream API可以直接实现统计需求,无需手写循环,也不需要引入第三方包。
一次性获取全部统计指标(最高效,仅需一次遍历)
使用IntSummaryStatistics可以一次拿到最大值、最小值、平均值、总和、元素数量五个核心指标:
import java.util.IntSummaryStatistics; import java.util.stream.Collectors; // 统计heightInCm字段的所有指标 IntSummaryStatistics heightStatistics = persons.stream() .collect(Collectors.summarizingInt(Person::getHeightInCm));
获取各指标的方式:
- 平均值:
heightStatistics.getAverage(),返回double类型 - 最大值:
heightStatistics.getMax(),返回int类型 - 最小值:
heightStatistics.getMin(),返回int类型 - 字段值总和:
heightStatistics.getSum(),返回long类型 - 参与统计的元素总数:
heightStatistics.getCount(),返回long类型
单独获取单个指标
如果只需要某一个指标,也可以单独调用对应方法:
// 求heightInCm平均值,列表为空时默认返回0.0 double avgHeight = persons.stream() .mapToInt(Person::getHeightInCm) .average() .orElse(0.0); // 求heightInCm最大值,列表为空时默认返回0 int maxHeight = persons.stream() .mapToInt(Person::getHeightInCm) .max() .orElse(0); // 求heightInCm最小值,列表为空时默认返回0 int minHeight = persons.stream() .mapToInt(Person::getHeightInCm) .min() .orElse(0);
注意:如果
persons是空列表,average()、max()、min()都会返回空的OptionalInt对象,调用orElse()设置默认值可以避免空指针异常。
方法2:第三方工具类(适合已引入对应依赖的项目)
如果你的项目已经引入了Guava、Apache Commons Lang等工具库,也可以用对应封装的统计工具,比如Guava的Stats类:
import com.google.common.math.Stats; double avgHeight = Stats.of(persons.stream().mapToInt(Person::getHeightInCm)).mean(); int maxHeight = Stats.of(persons.stream().mapToInt(Person::getHeightInCm)).max();
内容的提问来源于stack exchange,提问作者Jonathan
相关产品推荐
相关产品推荐

