以下均为个人理解
如有不对请在评论区指正QAQ
图片出自黑马程序员Java零基础视频教程_下部
1.什么是stream流
stream可以看作是一条流水线 可以将单双列集合 数组 和一些零散的数据跟流水线一样,一个一个的放上去并进行各种操作
2.获取stream流
在获取stream流的过程中,每个不同的数据类型都有不同的获取方式
单列集合
简化为lambda表达式
其中 stream是获取一个流水线,即将list中所有的数据一个一个放到流水线上
foreach是最简单高效的打印方法 其中s是每一个数据 此方法类似于for循环 将索引所对应的数据挨个遍历(个人理解)
双列集合
注意:双列集合无法直接使用stream,可以获取其中的键和值分别使用stream流,或者将其看成键值对一个整体,利用entrySet将其整体存入一个单列集合中然后使用stream
数组
注意:如果想将数组中的元素一个一个放到stream中数组必须是引用数据类型,如果传递基本数据类型,会把整个数组当作一个元素直接放到stream中
一堆零散数据
注意:这些数据需要是同种数据类型
基本数据类型和引用数据类型都可以直接使用stream
of的细节
3.stream流的中间方法
注意1示例展示:
1.filter 过滤
底层为hashcode和equals方法
如果流中装的是student等自定义的类 一定要重写hashcode和equals方法
匿名内部类写法:
lambda
2.limit 获取前几个元素
3是代表获取前三个元素
3.skip 跳过前几个元素
4代表跳过前四个元素
4.distinct 去重
5.concat 合并a和b两个流为一个流
尽可能让数据类型保持一致
如果不一致会提取两个元素的共同父类,将以父类的类型放入stream流中 此时子类中定义的方法将不能被使用
6.map转换流中的数据类型
!!!这块错了
切割后 姓名是0索引 年龄是1索引(对不起截图的时候我是真的忘了split方法 QAQ)
map中的s表示的是 姓名-年龄
foreach中的s表示的是 转化为int类型后的年龄
lambda写法(看着真的很简单)
4.steam流的终结方法
结束这条流水线
1foreach 遍历
lambda
2count 统计
统计里面有多少个
3toarray 收集流中的数据放到数组中(写的有点乱)
!!很重要 因为数组是可变参数 很多方法前面的泛型必须是可变参数 所以要用这个方法来转化类型
这个是放到object类型中的数组中
下面是如何放到指定类型的数组中
太复杂了还是看lambda吧
理解:
toArray后面的value是所指定的数组类型 new String[value] 是创建了一个指定数据类型的数组
4collect收集流中的数据放到集合中(list set map)
list
set
二者的区别:
如果集合中有重复元素
list不会去重 set会去重
map
太复杂了还是用lambda简单
注意:如果要把数据搜集到map集合中 键不能重复 否则代码报错
还是看看lambda吧
神清气爽了
tomap中 第一个s是键的规则 第二个s是值的规则
看这里用到了parseInt是将字符串转为十进制的数字,默认为十进制
总结
后面为课程里的练习
用于自己记录
写完练习发现lambda真的好方便