马士兵java架构师

您现在的位置是:架构师问答 >

架构师问答

java stream sum求和

2023-11-22 17:02:32架构师问答 本文浏览次数:1 百度已收录

本 文 目 录

java stream sum求和

Java Stream 是 Java 8 中引入的一个强大的工具,它允许我们以声明性的方式处理数据。其中,sum() 方法就是其中一个常用的流操作,用于对集合中的元素进行求和。

构造函数介绍

Stream 类并没有提供任何构造函数,因为它是一个不可实例化的类。我们可以从 Collection数组 中获取一个 Stream 对象。

List<Integer> list = Arrays.asList(1, 2, 3);
Stream<Integer> stream = list.stream(); // 从 Collection 中获取 Stream

int[] array = {1, 2, 3};
IntStream stream = Arrays.stream(array); // 从数组中获取 Stream

使用问题分析及解决方案

在使用 sum() 方法时,可能会遇到一些问题。例如,如果集合中包含的不是数字类型,或者集合为空,那么调用 sum() 方法将会抛出异常。

List<String> list = Arrays.asList("a", "b", "c");
OptionalDouble sum = list.stream().mapToInt(Integer::parseInt).average();
System.out.println(sum.getAsDouble()); // 抛出 NumberFormatException 异常

上述代码中,由于集合中的元素是字符串类型,所以在转换为整数时会抛出 NumberFormatException 异常。解决这个问题的方法是在转换之前先检查元素是否可以被解析为整数。

List<String> list = Arrays.asList("1", "2", "3");
OptionalDouble sum = list.stream()
    .filter(str -> str.matches("\\d+"))
    .mapToInt(Integer::parseInt)
    .average();
System.out.println(sum.getAsDouble()); // 输出:2.0

在这个解决方案中,我们首先使用 filter() 方法过滤出可以被解析为整数的字符串,然后再进行转换。

常用方法与功能举例

除了 sum() 方法外,Stream 还提供了许多其他有用的方法,如 map()filter()sorted() 等。这些方法可以让我们以链式的方式处理数据。

List<String> list = Arrays.asList("a", "bc", "def");
list.stream()
    .sorted(Comparator.comparing(String::length))
    .forEach(System.out::println);

这段代码首先对列表中的字符串按照长度进行排序,然后打印出排序后的结果。

完整代码示例

以下是一个完整的代码示例,展示了如何使用 sum() 方法对集合中的数字进行求和。

import java.util.Arrays;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        List<Integer> list = Arrays.asList(1, 2, 3);
        OptionalDouble sum = list.stream().mapToInt(Integer::intValue).average();
        System.out.println(sum.getAsDouble()); // 输出:2.0
    }
}

在这个示例中,我们首先创建了一个包含三个整数的列表,然后使用 stream() 方法获取一个 Stream 对象。接着,我们使用 mapToInt() 方法将 Stream<Integer> 转换为 IntStream,并调用 average() 方法计算平均值。最后,我们打印出求得的平均值。