一.Stream流编程—概念
-
流水线思想:流水线起始部分输入数据,在尾端得到结果,在期间进行处理操作
-
外部迭代和内部迭代
-
外部迭代:使用for/while循环迭代
int [] nums = { 1,2,3}; int sum=0; for(int i:nums) { sum+=i; } System.out.println("结果为:"+sum);
-
内部迭代:不需要关心如何循环的操作
int [] nums = { 1,2,3}; int sum2 = IntStream.of(nums).sum(); System.out.println("结果为:"+sum);
-
-
中间操作、终止操作和惰性求值
-
如下实例就是中间操作(返回流的操作),sum是终止操作[即看方法返回的类型,如果返回Stream则是中间操作,如果返回其他则是终止操作]
int sum2 = IntStream.of(nums).map(i->i*2).sum();
-
惰性求值就是终止(终止操作)没有调用的情况下,中间操作不会执行,实例代码如下
//定义一个静态方法 public static int doubleNum(int i) { System.out.println("执行了乘2操作"); return i*2; } //如下是在main方法中调用的内容 //map参数使用静态引入的方式 int sum2 = IntStream.of(nums).map(StreamDemo::doubleNum).sum();//输出多次执行了乘2操作,并执行*2操作 System.out.println("结果为":sum2);//正常输出 System.out.println("————————————————");//正常输出 IntStream.of(nums).map(StreamDemo::doubleNum);//此时由于没有调用终止操作,故不会调用静态引入方法doubleNum,即不会输出:执行了乘2操作
-
二.Stream流编程—创建
1.Stream流创建方式
相关方法 | |
---|---|
集合 | Collection.stream / parallelStream |
数组 | Arrays.stream |
数字Stream | IntStream / LongStream.range/rangeClosed / Random.ints/longs /doubles |
自己创建 | Stream.generate / iterate |
2.流创建实例代码
List<String>list = new ArrayList<>();
//从集合创建
list.stream();
list.parallelStream();
//从数组创建
Arrays.stream(new int[]{
2,3,5});
//创建数字流
IntStream.of(1,2,3);//创建指定流
IntStream.rangeClosed(1,10);//通过range创建流边界
//使用random创建一个无线流,故需要结合limit()定义流的终止点
new Random().ints().limit(10);
//自己创建使用Stream.generate()方法参数是Supplier
Random random = new Random();
Stream.generate(()->random.nextInt()).limit(20);//只生成20个值
三.Stream流编程—中间操作
中间操作的特点在于返回Stream类型
1.Stream流中间操作方式
相关方法 |
---|