Arrays.stream() 计算平均值最简洁但需注意空数组返回 OptionalDouble.empty(),整型数组须 mapToDouble,浮点数组可直接 average(),大数组或极端值建议手写循环防溢出,null 或非数值元素需先过滤清洗。
用
算平均值最省事,但要注意空数组
Java 8+ 之后,
配合
是最直接的写法,返回
—— 这不是偷懒设计,而是明确告诉你:空数组没有平均值。
空数组会触发
,直接调
抛
整型数组(
)走
,别漏了
,否则
不可用
浮点数组(
)可直接用
循环手动累加更可控,适合有精度或溢出顾虑的场景
流式 API 看似简洁,但对大数组或极端值(如
连续相加)可能悄悄溢出,且无法中途干预。手写循环虽然多几行,但每一步都自己盯着。
用
累加
,避免整数溢出;用
累加
,减少舍入误差
空数组必须提前判空,否则除零异常:
如果数组元素含
或无穷大,
会污染整个结果(任何数 + NaN = NaN)
处理
或非数值元素?得先清洗数据
Java 数组本身不存
(基本类型)或混合类型(引用类型数组如
才可能),但实际业务中常遇到
或
,里面混着
、
甚至
。
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
遇到
直接抛
必须先过滤:
若含
,不能靠自动转换,得显式解析:
,并捕获
性能差异不大,但别在循环里反复调
单次计算,
和
差距几乎感知不到;但若在高频方法里(比如每毫秒调一次),反复创建流对象会有微小开销,且 GC 压力略高。
立即学习
“
Java免费学习笔记(深入)
”;
不要写成:
大数据量(百万级)且对延迟敏感时,优先选
循环
注意
内部仍是两趟遍历(先求和再除长度),并非优化成单趟
空数组、
元素、整数溢出、类型混杂——这些不是边缘情况,是线上日志里真实报错的前几名。别等
崩给你看。
Arrays.stream()Arrays.stream()average()OptionalDoubleOptionalDouble.empty()getAsDouble()NoSuchElementExceptionint[]Arrays.stream(arr).mapToDouble(i -> i)mapToDoubleaverage()double[]Arrays.stream(arr).average()int[] nums = {1, 2, 3, 4, 5};
double avg = Arrays.stream(nums).mapToDouble(i -> i).average().orElse(0.0); // 建议显式 fallbackforInteger.MAX_VALUElongint[]doublefloat[]ArithmeticException: / by zeroNaNDouble.NaNint[] arr = {1000000000, 1000000000, 1000000000};
long sum = 0;
for (int x : arr) sum += (long) x;
double avg = arr.length > 0 ? (double) sum / arr.length : 0.0;nullnullNumber[]Number[]Object[]nullStringBigDecimalArrays.stream(numbers).mapToDouble(Number::doubleValue).average()nullNullPointerExceptionArrays.stream(numbers).filter(Objects::nonNull).mapToDouble(Number::doubleValue)Strings -> Double.parseDouble(s)NumberFormatExceptionstream()stream()forfor (int i = 0; i forDoubleStream.average()nullOptionalDouble.empty().getAsDouble()