这三个流分别用于解决Integer与int,Long与long,Double与double之间的装箱拆箱的问题。
例如,我们之前有类似的操作,来计算所有数的和:
- int calories = menu.stream()
- .map(Dish::getCalories)
- .reduce(0, Integer::sum);
由于Calories是包装类型,会出现多次拆箱的操作。
转而代之的是下面的IntStream, 通过mapToInt转换成了IntStream
- int calories = menu.stream()
- .mapToInt(Dish::getCalories)
- .sum();
IntStream有一些扩展方法,例如sum(), average(), min(), max()可以很方便的完成reduce操作。
IntStream也可以转换成Stream
- IntStream intStream = menu.stream().mapToInt(Dish::getCalories);
-
- Stream
stream = intStream.boxed();
通过boxed方法完成装箱操作。
在通过IntStream进行reduce操作时,如果遇到元素不存在的情况怎么办?
- OptionalInt option = menu.stream()
- .mapToInt(Dish::getCalories)
- .max();
也可以使用orElse进行指定默认值
- int option = menu.stream()
- .mapToInt(Dish::getCalories)
- .max()
- .orElse(1);
IntStream.range(1,10).forEach(System.out::println);
生成从start开始,到end-1之间的整数。

IntStream.rangeClosed(1,10).forEach(System.out::println);
生成从start开始,到end之间的整数。
