1. 引言

本文将介绍两种计算Java数组元素总和与平均值的方法:传统循环和Stream API。无论你是处理一维数组还是二维数组,都能找到简单粗暴的解决方案。

2. 计算数组元素总和

2.1 使用for循环求和

最直接的方式就是遍历数组累加元素值。初始化一个sum变量为0,然后逐个累加数组元素:

public static int findSumWithoutUsingStream(int[] array) {
    int sum = 0;
    for (int value : array) {
        sum += value;
    }
    return sum;
}

2.2 使用Java Stream API求和

Stream API提供了更简洁的实现方式:

public static int findSumUsingStream(int[] array) {
    return Arrays.stream(array).sum();
}

⚠️ 注意:sum()方法仅适用于基本类型流。如果处理的是Integer对象数组,需要先转换为IntStream

public static int findSumUsingStream(Integer[] array) {
    return Arrays.stream(array)
      .mapToInt(Integer::intValue)
      .sum();
}

想深入了解Stream API?可以参考这篇教程

3. 计算数组平均值

3.1 不使用Stream API

既然已经会求和,计算平均值就很简单了:平均值 = 元素总和 / 元素数量

public static double findAverageWithoutUsingStream(int[] array) {
    int sum = findSumWithoutUsingStream(array);
    return (double) sum / array.length;
}

✅ 关键点:

  1. 整数相除会丢失精度,必须先将sum转换为double
  2. 数组长度通过length属性获取

3.2 使用Stream API

Stream API提供了直接计算平均值的方法:

public static double findAverageUsingStream(int[] array) {
    return Arrays.stream(array).average().orElse(Double.NaN);
}

⚠️ average()返回OptionalDouble,需要处理空值情况。关于Optional的更多细节可以参考这篇文章

4. 计算二维数组的平均值

二维数组的平均值计算逻辑类似:所有元素总和 / 元素总数

4.1 不使用Stream API

通过嵌套循环遍历所有元素:

public static double findAverageWithoutUsingStream(int[][] array) {
    int sum = 0;
    int count = 0;
    for (int[] row : array) {
        for (int value : row) {
            sum += value;
            count++;
        }
    }
    return (double) sum / count;
}

4.2 使用Stream API

Stream API处理二维数组更优雅:

public static OptionalDouble findAverageUsingStream(int[][] array) {
    return Arrays.stream(array)
      .flatMapToInt(Arrays::stream)
      .average();
}

✅ 处理流程:

  1. 将二维数组转换为流(Arrays.stream(array)
  2. 使用flatMapToInt扁平化为IntStream
  3. 直接调用average()方法

5. 总结

本文展示了计算Java数组总和与平均值的多种实现方式:

  • 传统循环:直观易懂,适合简单场景
  • Stream API:代码简洁,适合复杂操作

完整代码示例可在GitHub获取。


原始标题:Find Sum and Average in a Java Array | Baeldung