IntStream
、LongStream
和 DoubleStream
分别表示原始 int
流、 原始 long
流 和 原始 double
流。
这三个原始流类提供了大量的方法用于操作流中的数据,同时提供了相应的静态方法来初始化它们自己。
这三个原始流类都在 java.util.stream
命名空间下。
方法 | 说明 |
rangeClosed(a,b) | 类似我们数学中[a,b] |
range(a,b) | 类似我们数学中[a,b) |
sum | 求和 |
sorted | 排序 |
示例:
int [] ints={1,5,2,4,8};
System.out.println("________rangeClosed 使用_________");
LongStream.rangeClosed(1,5).forEach(System.out::println);
System.out.println("________range 使用_________");
IntStream.range(0,5).forEach(System.out::println);
System.out.println("________sum 使用_________");
int sum = IntStream.rangeClosed(0, 5).sum();
System.out.println(sum);
System.out.println("________sorted 使用_________");
IntStream.of(ints).sorted().forEach(System.out::println);
结果:
方法 | 说明 |
average | 计算平均值 |
max | 查找最大值 |
示例:
System.out.println("________average 使用_________");
System.out.println(DoubleStream.of(1, 5).average().getAsDouble());
System.out.println("________sum 使用_________");
System.out.println(DoubleStream.of(1, 5).sum());
结果:
求和 1~1000000000
大致有三种:
第一种就是for循环,这个不用说了
第二种就是forkjoin(适用于数据量大的),自己可以去学习一下
想说一下第三种,基于流的,速度快
long start = System.currentTimeMillis();
long reduce = LongStream.rangeClosed(0L, 1000000000L).parallel().reduce(0, Long::sum);
System.out.println(reduce);
long end = System.currentTimeMillis();
System.out.println(end - start);
结果: