public static void test_reduce_caluli(List menu) {
int calories = menu.stream()
.map(Dish::getCalories)
.reduce(0, Integer::sum);
System.out.println(“菜品中的总卡路里:” + calories);
}
上面包含了一个基本数据类型的装箱/拆箱动作,java8的流API提供了mapToInt方法,直接返回int类型的流
我们先稍微看一下mapToInt的方法声明:
IntStream mapToInt(ToIntFunction<? super T> mapper)
接受一个T->int的函数式编程接口,直接返回IntStream流对象,而且IntStream本身提供了一些常用的聚合函数,例如sum。
使用IntStream来实现计算菜单中所有菜品的卡路里之和,其示例如下:
public static void test_reduce_caluli_intStream(List menu) {
int calories = menu.stream()
.mapToInt(Dish::getCalories)
.sum();
System.out.println(“菜品中的总卡路里:” + calories);
}
1.1.2 转换回对象流
使用了特化流例如IntStream后,将不能再自动转换为其对应的封装对象流Stream< T >了,我们可以随意从IntStream对象中对应的通用方法的函数声明,例如IntStream#map函数的声明如下:
IntStream map(IntUnaryOperator mapper);
只能接受int -> int的函数式编程接口,如果想将IntStream转回到Stream< Integer >,该如何处理呢?
IntStream提供了boxed()方法来实现将基础数据类型转换回对应的包装类型的流。
1.1.3 常用函数
Stream中定义的方法,IntStream也可以使用,例如map、flatMap、distinict等,IntStream除这些之外,还提供了常用的聚合函数,例如sum、min、max、average(平均数)。
OptionalDouble average();
OptionalInt max();
OptionalInt min();
int sum();
有关Optional相关的类将在下文详细介绍。
另外除了上面提到的聚合函数,IntStream还提供了两个与数值范围的方法:
public static IntStream range(int startInclusive, int endExclusive);<