使用Java Stream的average()方法计算平均值

本文详细介绍了Java 8 Stream API的average()方法,通过示例展示了如何计算整数、浮点数及自定义对象流的平均值。文章还解释了average()方法的工作原理,强调了在流为空时如何处理。最后,总结了average()方法在数值统计分析中的优势和在代码简洁性方面的贡献。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java 8 引入的 Stream API 提供了强大的数据处理功能,其中的 average() 方法用于计算流中元素的平均值。本文将详细介绍 average() 方法的用法、示例代码以及其背后的实现原理。 

示例代码

示例1:计算整数流的平均值

package com.fm.design.demo.java.stream.average;

import java.util.stream.IntStream;

/**
 * @author 未来码匠
 */
public class AverageDemo {

    public static void main(String[] args) {
        IntStream intStream = IntStream.of(1, 2, 3, 4, 5);
        double averageInt = intStream.average().orElse(0.0);
        System.out.println("整数流的平均值:" + averageInt);
    }

}

package com.fm.design.demo.java.stream.average;


import java.util.stream.IntStream;

/**
 * @author 未来码匠
 */
public class AverageDemo2 {

    public static void main(String[] args) {
        int[] numbers = {1, 2, 3, 4, 5};

        double average = IntStream.of(numbers)
                .average()
                .orElse(0.0); // 如果Stream为空,则返回0.0

        System.out.println("整数流的平均值:" + average);
    }

}

package com.fm.design.demo.java.stream.average;

import java.util.stream.Stream;

/**
 * @author 未来码匠
 */
public class AverageDemo6 {

    public static void main(String[] args) {
        // 创建一个包含整数的流
        Stream<Integer> numbers = Stream.of(1, 2, 3, 4, 5);

        // 计算平均值
        double average = numbers
                .mapToInt(Integer::intValue) // 将流转换为 IntStream
                .average() // 计算平均值
                .orElse(0.0); // 如果流为空,返回默认值

        System.out.println("整数流的平均值:" + average);
    }

}

package com.fm.design.demo.java.stream.average;

import java.util.ArrayList;
import java.util.List;
import java.util.OptionalDouble;
import java.util.stream.Stream;

/**
 * @author 未来码匠
 */
public class AverageDemo7 {

    public static void main(String[] args) {
        List<Integer> numbers = new ArrayList<>();
        numbers.add(1);
        numbers.add(2);
        numbers.add(3);
        numbers.add(4);
        numbers.add(5);

        // 使用stream().average()计算平均值
        OptionalDouble average = numbers.stream()
                .mapToDouble(Integer::doubleValue)
                .average();

        // 打印平均值(如果存在)
        if (average.isPresent()) {
            System.out.println("整流的平均值:" + average.getAsDouble());
        } else {
            System.out.println("没有元素,无法计算平均值。");
        }
    }

}

package com.fm.design.demo.java.stream.average;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.OptionalDouble;

/**
 * @author 未来码匠
 */
public class AverageDemo8 {

    public static void main(String[] args) {
        List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5);

        OptionalDouble average = numbers.stream()
                .mapToDouble(Integer::doubleValue)
                .average();

        if (average.isPresent()) {
            System.out.println("整数流的平均值:" + average.getAsDouble());
        } else {
            System.out.println("流为空,无法计算平均值。");
        }
    }

}

示例2:计算浮点数流的平均值 

package com.fm.design.demo.java.stream.average;

import java.util.stream.DoubleStream;
import java.util.stream.IntStream;

/**
 * @author 未来码匠
 */
public class AverageDemo1 {

    public static void main(String[] args) {
        DoubleStream doubleStream = DoubleStream.of(1.0, 2.0, 3.0, 4.0, 5.0);
        double averageDouble = doubleStream.average().orElse(0.0);
        System.out.println("浮点数流的平均值:" + averageDouble);
    }

}

或 

package com.fm.design.demo.java.stream.average;

import java.util.Arrays;
import java.util.stream.DoubleStream;

/**
 * @author 未来码匠
 */
public class AverageDemo3 {

    public static void main(String[] args) {
        double[] numbers = { 1.0, 2.0, 3.0, 4.0, 5.0 };

        // 创建一个DoubleStream
        DoubleStream doubleStream = Arrays.stream(numbers);

        // 计算平均值
        double average = doubleStream.average().orElse(0.0);

        System.out.println("浮点数流的平均值: " + average);
    }

}

package com.fm.design.demo.java.stream.average;

import java.util.OptionalDouble;
import java.util.stream.DoubleStream;

/**
 * @author 未来码匠
 */
public class AverageDemo4 {

    public static void main(String[] args) {
        // 创建一个Double类型的流
        DoubleStream doubleStream = DoubleStream.of(1.0, 2.0, 3.0, 4.0, 5.0);

        // 使用stream().average()方法计算平均值
        OptionalDouble average = doubleStream.average();

        // 打印平均值,如果存在的话
        if (average.isPresent()) {
            System.out.println("浮点数流的平均值: " + average.getAsDouble());
        } else {
            System.out.println("流为空,无法计算平均值。");
        }
    }

}

package com.fm.design.demo.java.stream.average;

import java.util.List;

/**
 * @author 未来码匠
 */
public class AverageDemo5 {

    public static void main(String[] args) {
        List<Integer> numbers = List.of(1, 2, 3, 4, 5);

        // 使用Stream的average()方法计算平均值
        double average = numbers.stream()
                .mapToDouble(Integer::doubleValue)
                .average()
                .orElse(0.0);

        System.out.println("浮点数流的平均值: " + average);
    }

}

示例3: 计算自定义对象流的平均值

package com.fm.design.demo.java.stream.average;

import lombok.AllArgsConstructor;
import lombok.Data;
import java.util.stream.Stream;

/**
 * @author 未来码匠
 */
public class AverageDemo9 {

    public static void main(String[] args) {
        Stream<Student> studentStream = Stream.of(
                new Student("Alice", 90),
                new Student("Bob", 85),
                new Student("Charlie", 95)
        );
        double averageScore = studentStream.mapToDouble(Student::getScore).average().orElse(0.0);
        System.out.println("学生分数流的平均值:" + averageScore);
    }

    @Data
    @AllArgsConstructor
    static class Student {
        private String name;
        private int score;
    }

}

详解

average() 方法用于计算 Stream 中元素的平均值。它返回一个 OptionalDouble 对象,该对象包含了平均值(如果流中有元素的话)。如果流为空,那么返回的 OptionalDouble 将为空,因此可以使用 orElse() 方法提供一个默认值。

在示例代码中,我们首先创建了两种类型的流:一个整数流和一个浮点数流。然后,分别使用 average() 方法计算它们的平均值,并通过 orElse() 方法提供了默认值,以处理可能的空流情况。

使用 mapToInt() 方法将流转换为一个 IntStream。

使用mapToDouble()方法将Stream中的整数转换为双精度数(double)。

我们使用OptionalDoubleisPresent()方法来检查平均值是否存在。如果存在,我们通过getAsDouble()方法获取平均值并打印出来。否则,我们输出一条消息表示流为空,无法计算平均值。

总结

average()方法是Java Stream API中的一个有用工具,用于计算数字流的平均值。通过使用这个方法,你可以轻松地对集合中的数字进行统计分析,而不必手动编写循环来计算平均值。它提供了更简洁和可读性更高的代码,有助于提高代码的可维护性。在处理数值型数据时,average()方法是一个强大的工具,可以大大简化你的代码。

这篇文章介绍了average()方法的基本用法,并提供了示例代码和详细解释,帮助读者更好地理解和应用这个方法。希望本文能够帮助你更好地利用Java Stream中的average()方法进行数字流的平均值计算。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星际编程喵

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值