概述
获取Stream流
集合的stream流
集合名.stream( );
collection集合
List集合与Set集合都属于Collection集合,因此可以直接调用stream方法获取stream流,示例如下
结果===>
map集合
map集合存在键值对,因此无法使用该方法直接获取stream流,可以采用如下两种方法
- 分别将键与值装入到set集合中,再取得他们各自的stream流,对其进行操作
- 通过通过 map.enterySet( ) 方法将他们封装成键值对 对象,再将这些键值对都装入set集合,这样就可以使用collection集合的stream流获取方法对其进行操作了
数组的stream流
Arrays.stream(数组名) 或 Stream.of(数组名) 两种方法均可,如下图
stream流的中间方法
调用完中间方法后返回的还是一个stream流
map方法
可以理解成一种加工操作,比如遍历的是对象,想要获取对象的名字,就可以用map方法得到名字的stream流并返回,如下
注:下图是采用方法引用简化过的,原来是 map(s -> s.getName() ),用意就是得到students对象中的所有名字
distinct方法
可以去除stream流中的重复元素,如果需要去重的是自定义对象,如同之前学习过的 去重机制 ,需要在该对象类中重写 equals方法 与 hashcode方法 (右键generate生成即可)
stream流的终结方法
调用终结方法后就没有stream流了
max 与 min 方法
如果需要找的最大值或最小值是一个对象,则需要对comparator重写,如下
收集stream流方法
毕竟stream流的作用就是来简化操作集合、数组的代码的,集合、数组才是开发中要使用的东西,因此经常需要将stream流的结果转换回集合或数组
收集到Collection集合
使用 collect(Collectors.toList()); 就是收集为List集合,使用 collect(Collectors.toSet()); 就是收集为Set集合,示例如下
注:stream流只能收集一遍,当收集完后stream流就会关闭,因此不能取出stream流后分别收集,会报错,具体示例如下:
当第一次使用studentStream.collect之后,stream流已经被关闭了,因此第二段set收集会出错
收集到Map集合
由于不知道收集后的键与值分别取谁,因此需要进行声明,collect(Collectors.toMap( a -> 键, a -> 值 )); 示例如下,将学生的姓名作为键,学生的身高作为值
注:该方法无法帮忙去重,如果收集的对象中出现了重复的会报异常,因此最后在收集为map集合前使用 distinc( ) 去重,示例如下:
收集到数组
toArray( ) 即可,示例如下:
如果想要具体声明是什么类型的数组,则需要进一步在toArray()中声明,具体如下