Java-8-IntStream接口
interface IntStream extends BaseStream<Integer, IntStream>
下面这段代码计算菜单的热量:
int calories = menu.stream()
.map(Dish::getCalories)
.reduce(0, Integer::sum);
这段代码有一个问题,它有一个暗含的装箱成本。每个 Integer 都必须拆箱成一个原始类型,再进行求和
要是可以直接像下面这样调用 sum 方法,岂不是很好:
int calories = menu.stream()
.map(Dish::getCalories)
.sum();
但这是不可能的。问题在于 map 方法会生成一个 Stream 。虽然流中的元素是 Integer 类型,但 Streams 接口没有定义 sum 方法
Java 8引入了三个原始类型特化流接口来解决这个问题: IntStream 、 DoubleStream 和LongStream ,分别将流中的元素特化为 int 、 long 和 double ,从而避免了暗含的装箱成本。每个接口都带来了进行常用数值归约的新方法,比如对数值流求和的 sum ,找到最大元素的 max 。此外还有在必要时再把它们转换回对象流的方法
生成流
-
IntStream of(int t)
-
IntStream of(int… values)
-
IntStream iterate(final int seed, final IntUnaryOperator f)
-
IntStream generate(IntSupplier s)
使用
public class M1 {
public static void main(String[] args) {
IntStream intStream1 = IntStream.of(1,2,3,4,5,6,7,8,9);
intStream1.forEach(System.out::println);
System.out.println("***********************************************");
int[] d = {1,2,3,4,5,6,7,8,9};
IntStream intStream2