在Java中,sum()
方法是IntStream
, LongStream
, 和 DoubleStream
类提供的终端操作,用于计算流中所有元素的总和。这些类专门用于处理基本类型的流,而Stream<T>
类本身并不包含sum()
方法。
也就是说,sum()是专门给数值类型实用的!
-
对于
IntStream
,LongStream
, 或DoubleStream
,可以直接调用sum()
。 -
如果你有
Stream<Integer>
, 必须需要先将其转换为IntStream
。
示例代码:
import java.util.stream.IntStream;
import java.util.stream.Stream;
public class SumExample {
public static void main(String[] args) {
// 创建一个包含Integer的Stream
Stream<Integer> integerStream = Stream.of(1, 2, 34);
// 将Stream<Integer>转换为IntStream
IntStream intStream = integerStream.mapToInt(Integer::intValue);
// 使用sum()方法求和
int total = intStream.sum();
System.out.println("The sum is: " + total);
}
}
注意事项
-
在调用如
mapToInt
这样的中间操作后,原始流integerStream
会被消耗掉,这意味着你不能再次在该流上执行其他操作。如果需要多次使用流中的元素,应该创建新的流实例或使用collect
收集流到集合中。 -
确保在调用
sum()
之前,流中的所有元素都是有效的且可以被转换为所需的基本类型,否则可能会抛出异常。 -
sum()
是一个终端操作,意味着它会触发流的执行,并且之后不能在同一个流上执行其他终端操作。如果需要对相同数据执行多个操作,应在不同流实例上执行,或先将数据收集到集合中。