You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Java 8实现列表数值平方、过滤后求剩余数平均值?

Java 8 实现数值列表平方、过滤后求平均值

完整代码实现

下面是补全后的完整代码,包含平方、过滤、求平均值的完整流程:

import java.util.List;
import java.util.OptionalDouble;

public class SquaredAverageCalculator {
    public static void main(String[] args) {
        List<Integer> numbers = List.of(12, 9, 13, 4, 6, 2, 4, 12, 15);
        
        // 计算平方后大于100的数值的平均值
        OptionalDouble average = numbers.stream()
                .mapToInt(num -> num * num)  // 将元素转为int类型,避免装箱开销
                .filter(squaredNum -> squaredNum > 100)  // 过滤出平方值大于100的元素
                .average();  // 计算平均值
        
        // 处理结果:避免空流导致的异常
        if (average.isPresent()) {
            System.out.println("符合条件的数值平均值为: " + average.getAsDouble());
        } else {
            System.out.println("没有找到平方值大于100的数值,无法计算平均值");
        }
        
        // 也可以直接用orElse设置默认值
        double avgResult = average.orElse(0.0);
        System.out.println("平均值(无符合条件时默认0): " + avgResult);
    }
}

各步骤详细解释

  1. 平方运算:使用mapToInt(num -> num * num)替代普通的map,将Stream<Integer>转为IntStream,避免自动装箱/拆箱的性能损耗,同时后续的数值计算更高效。
  2. 过滤操作:filter(squaredNum -> squaredNum > 100)保留平方后大于100的元素,原列表平方后的结果为[144, 81, 169, 16, 36, 4, 16, 144, 225],过滤后剩下[144, 169, 144, 225]。
  3. 求平均值的核心逻辑:
    • average()是IntStream提供的终端操作,会计算流中所有元素的平均值,返回OptionalDouble类型。
    • 使用OptionalDouble的原因是:如果过滤后的流为空(比如所有元素平方后都≤100),直接调用getAsDouble()会抛出NoSuchElementException,而OptionalDouble可以安全处理这种空值场景。
    • 你可以通过isPresent()判断是否有有效平均值,或者用orElse(0.0)直接获取结果(空流时返回0.0作为默认值)。

手动验证计算结果

过滤后的元素总和:144 + 169 + 144 + 225 = 682
元素数量:4个
平均值:682 / 4 = 170.5,和代码运行结果一致。

内容的提问来源于stack exchange,提问作者Chärming ßoy

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 02:30:44