介绍
mapToDouble
, mapToLong
, 和 mapToInt
是 Java Stream API 中的方法,用于将 Stream 中的元素映射为 double、long 或 int 类型。
这些方法接受一个函数式接口作为参数,用于定义元素到目标类型的转换规则。具体来说:
mapToDouble
方法将 Stream 中的元素映射为 double 类型,并返回一个 DoubleStream。mapToLong
方法将 Stream 中的元素映射为 long 类型,并返回一个 LongStream。mapToInt
方法将 Stream 中的元素映射为 int 类型,并返回一个 IntStream。
它们直接使用了基本的 Stream 操作(如count(), min(), max(), sum() 等)来逐步计算统计信息。
// 最小值
double min = list.stream().mapToDouble(User::getDel).min().orElse(0);
// 最大值
double max = list.stream().mapToDouble(User::getDel).max().orElse(0);
// 求和
double sum = list.stream().mapToDouble(User::getDel).sum();
// 总数
double count = list.stream().mapToDouble(User::getDel).min().orElse(0);
// 平均值
double average = list.stream().mapToInt(User::getDel).average().orElse(0);
注意事项
- 对于空集合来说,使用
orElse()
方法是适用的,因为在空集合的情况下,方法会返回OptionalDouble.empty()
,而直接使用getAsDouble()
方法就会抛出"No value present"异常。 - 不论集合是空还是存在
null
值,直接使用getAsDouble()
方法就一定会报异常,如果获取值最好是使用orElse()
方法配合filter()
方法来先过滤null
值在获取值,这样无论什么情况下都不会报出异常
集合为空
// 返回:0
double min1 = list.stream().mapToDouble(User::getDel).min().orElse(0);
// 无搜索元素异常: No value present
double min2 = list.stream().mapToDouble(User::getDel).min().getAsDouble();
集合存在 null 值
// 空指针异常: null
double min1 = list.stream().mapToDouble(User::getDel).min().orElse(0);
// 空指针异常: null
double min2 = list.stream().mapToDouble(User::getDel).min().getAsDouble();