Stream流

(1)作用:

结合了Lambda表达式,简化集合、数组的操作

(2)使用步骤:

1.先得到一条Stream流(流水线),并把数据放上去;

 

单列集合: list.stream().forEach(s->System.out.println(s));

 

双列集合:

获取key:

hm.keySet().stream().forEach(s->System.out.println(s));

获取对象:

hm.entrySet().stream().forEach(s->System.out.println(s));

 

数组:

Array.stream(arr).forEach(s->System.out.println(s));

 

一堆零散数据:

Stream.of(数据).forEach(s->System.out.println(s));

注意:数据类型可以是基本数据类型,也可以是引用数据类型,但是数据类型要一致。

Stream接口中静态方法of的细节

方法的形参是一个可变参数,可以传递一堆零散的数据,也可以传递数组

但是数组必须是引用数据类型的,如果传递基本数据类型,是会把整个数组当做一个元素,放到Stream流中,返回得到的是地址值。

 

2.利用Stream流中的API进行各种操作

过滤、转换(中间方法)-------方法调用完后,还可以调用其他方法

 

 注意:

1.中间方法,返回新的Stream流,原来的Stream流只能使用一次,建议使用链式编程

2.修改Stream流中的数据,不会影响原来集合或者数组中的数据

 

limit———获取前几个元素

skip———跳过前几个元素

 

当和并两个流时,若两个类的数据类型不一致,则将合并后的类变成它们的父类,此时便不能使用子类的特有方法,所以建议合并相同的类。

Stream.concat(list1.stream(),list2.stream());

 

统计、打印(终结方法)-------最后一步,调用完后不能调用其他方法

 

 toArray():

String[ ] arr2=list.stream().toArray(value->new String[value]);

//value为数据流中数据的个数

System.out.println(Arrays.toString(arr));

 

collect:

1.收集到List集合中:

list.stream.中间方法.collect(Collectors.toList());

2.收集到Set集合中:

list.stream.中间方法.collect(Collectors.toSet());

3.收集到Map集合中:

toMap:

参数一表示键的生成规则

参数二表示值的生成规则

 

参数一:

       Function泛型一:表示流中每一个数据的类型

                    泛型二:表示Map集合中键的数据类型

 

        方法apply形参:依次表示流里面的每一个数据

                     方法体:生成键的代码

                     返回值:已经生成的键

 

  Function泛型一:表示流中每一个数据的类型

                    泛型二:表示Map集合中值的数据类型

 

 方法apply形参:依次表示流里面的每一个数据

                     方法体:生成值的代码

                     返回值:已经生成的值

 

注意点:如果要收集到Map集合当中,键不能重复,否则会报错。

posted @ 2022-10-30 21:12  Linqylin  阅读(81)  评论(0编辑  收藏  举报