jdk8 新特性:stream流操作
包含:collect-收集转化、join-字符串连接、map-映射、sort-排序、findFirst-筛选第一个、max/min-获取最大/小的一个值、findAny-查找任意一个值、anyMatch/allMatch-任意匹配/全部匹配、toMap-转化为Map集合、groupingBy-分组、collectingAndThen-去重
使用方法、场景示例CSDN博客地址:https://blog.csdn.net/qq_35893033/article/details/128485642
博客地址:芒果-橙
场景数据,案例使用
1 | /** |
join–字符串连接
- 场景:汇总所有人员的姓名,在页面中统一展示
- 使用:join将所有人员的姓名拼接成一个字段,以分号“;”作为连接符
- 输出:name = 小赵;小钱;小孙;小钱
1 | /** |
map–映射处理
- 场景1:汇总所有人员的姓名,在页面中依次展示,不合并
- 使用:map依次获取人员的姓名,组成一个新的集合
- 输出:nameList = [小赵, 小钱, 小孙, 小钱]
1 | /** |
- 场景2:汇总所有人员的姓名和年龄,格式(姓名-年龄),在页面中依次展示
- 使用:map中进行人员姓名和年龄的拼接,组成一个新的组合
- 输出:nameAgeList = [小赵-23, 小钱-12, 小孙-5, 小钱-25]
1 | /** |
sort–排序
- 场景:将人员按年龄的大小排序输出,在页面显示人员姓名及年龄
- 使用:sort根据年龄进行排序
- 输出:people.age old ==> young[{“age”:25,”name”:”小钱”},{“age”:23,”name”:”小赵”},{“age”:12,”name”:”小钱”},{“age”:5,”name”:”小孙”}]
1 | /** |
count–统计
- 场景:统计人员中叫“小钱”的有几个
- 使用:count对象中姓名为小钱的数量
- 输出:统计:2
1 | /** |
findFirst–筛选第一个
- 场景:找到人员中年龄最小的人,在页面显示该人员信息
- 使用:先排序,然后获取第一个
- 输出:person = {“age”:5,”name”:”小孙”}
1 | /** |
max/min–获取最大/小的一个值(某些情况可以替代sort+findFirst,例如上个例子)
- 场景:找到人员中年龄最大的人,在页面显示该人员信息
- 使用:max获取最大值
- 输出:person2={“age”:25,”name”:”小钱”}
1 | /** |
findAny–查找任意一个值
- 场景:确认这群人中有没有叫“小赵”的
- 使用:findAny判断,满足一个即可
- 输出:exist=true
1 | /** |
anyMatch/allMatch–任意匹配、全部匹配((在某些情况可以替代findAny,比如上面那个例子)
- 场景1:确认这群人中有没有叫“小赵”的
- 使用:anyMatch判断,满足一个即可
- 输出:exist=true
1 | /** |
- 场景2:这群人是不是都叫“小赵”
- 使用:allMatch判断,全部满足才行
- 输出:exist=false
1 | /** |
toMap–转化为Map集合
- 场景:把List转化为Map
- 使用:toMap转化
- 输出:map = {“小孙”:5,”小钱”:25,”小赵”:23}
- 备注:注意看输出的小钱,是后设置的数据
1 | /** |
groupingBy–分组
- 场景:将这群人相同名字的分成一组
- 使用:groupingBy分组
- 输出:peopleMap = {“小孙”:[{“age”:5,”name”:”小孙”}],”小钱”:[{“age”:12,”name”:”小钱”},{“age”:25,”name”:”小钱”}],”小赵”:[{“age”:23,”name”:”小赵”}]}
1 | /** |
collectingAndThen–去重
- 场景:将这群人中相同名字、相同年龄的多余人员去掉,仅保留一个
- 使用:在收集的过程中再进行过滤的操作
- 输出:去重:[{“age”:5,”name”:”小孙”},{“age”:23,”name”:”小赵”},{“age”:12,”name”:”小钱”},{“age”:25,”name”:”小钱”}]
- 备注:使用的场景数据是generatePerson2
1 | /** |