系统指标优化 & Stream流 API使用及源码分析

java 8 Stream流 api 使用

(1)集合筛选,为什么此处要使用 Collectors.toMap 加 Function.identity() 的方式,而不使用简单的filter过滤呢?
Stream流 API 代码: collect(Collectors.toMap(GoldTagResponse::getValue, Function.identity(), (p1, p2) -> p1)).values())
在这里插入图片描述
在这里插入图片描述
首先在Mybatis的sql中是已经做过value_type 和 falgs 这两种熟悉的字段筛选,但是筛选后的数据仍然存储falgs不为0或4的情况,value_type展示能够保住,
所以为了保住查询数据的稳定性,在mybatis sql查询之后在代码层面做第二次集合过滤,那么这里为什么需要做toMap的操作呢?因为我是根据查询数据根据value值进行降序排序的,
但是排序后的数据中会存在很多value数据相同的值,导致排序后的数据不能很好的展示,于是现在使用Stream流对集合中的value字段进行去重操作,看看能否达到排序后数据不重复的现象
去重方式有多种,一种是使用Set集合、一种是使用重新HashCode和equlas的方式、一种是转Map的方式、还有直接对单属性去重 distinct()方法
由于转Map的方式最直接且易用,故选择 Collectors.toMap
这个APi的Function.identity()以及(p1, p2) -> p1是什么意思呢?
Function.identity()返回一个输出跟输入一样的Lambda表达式对象,等价于形如t -> t形式的Lambda表达式
Function.identity()源码:返回一个 始终返回其输入参数的函数

(p1, p2) -> p1
元素p1与p2相同,则取其一
在这里插入图片描述
identify() 就是 Function 接口的一个 static 方法
Function.identity()学习地址:Lambda学习地址

可以看到Collectors.toMap入参需要传入Function函数,用于生成Map集合的key 和 value
在这里插入图片描述
在Map集合中,如果key相同,则新的value会覆盖旧的value
HahsMap集合使用put方法时,底层会调用hashCode方法将key转换为hash值,然后根据哈希函数/哈希算法将哈希值转换为数组下标,若此下标的数组没有元素,则直接添加,若此下标的数组有链表,
则将key与链表中每个节点的key进行equals比对,若都返回false,则将元素添加在链表末尾,若返回true,则将此节点的value覆盖

我的理解,这里去重其实就是利用了HashMap的key相等覆盖值的原理进行去重,将我需要过滤去重的value值作为Map的key存入,需要过滤的集合作为Map的value存入,
如果value重复那么重复的key也只会保存一份,但是Map的value只会保存最新的一份,所以就将重复的数据过滤掉了,其实可以手动写一个HashMap用这种方式存入value即可

下面是HashMap 的key重复则覆盖的源码,可以看到如果计算出的hash值如果相同,则进一步比较key的值使用equlas比较存入key的内容是否重复,如果重复则覆盖这个key原有的value
在这里插入图片描述
实战代码中使用,Function.identity()其实就是参数引用传入的意思,这里是将整个集合传入,用于过滤
在这里插入图片描述
最后过滤出的是Map集合,所以使用value获取Map集合的value值,也就是上面传入的集合List res ,最后将去重后的集合进行转换为原类型集合
在这里插入图片描述
value()方法返回当前Map集合的value值
在这里插入图片描述
(2)使用contains包含字符串的方式过滤出 多种前缀的字符属性,类型sql 中的 like + concat(‘%’,‘xxx’,‘%’)的方式,因为sql中是查出了多种监控项指标,
这里是取出具体的指标,但是这个指标是有很多种类型,也就是多个前缀不同的字符串,所以需要再次concat过滤
在这里插入图片描述
(3)
peek使用
peek函数同map函数,都是对集合中的数据进行处理然后转换,但是map对集合处理之后是有返回值的,也就是集合的结果,一般用map的时候都需要结束当前Stream流的链式操作
所以map我一般都会放在结尾使用,但是有时候需要优先对集合处理然后再进行排序或其他操作,这里就可以使用peek的方式,作用在Stream流的中间,因为peek传入的是Consumer无集合返回,而map传入的
是function有集合返回的
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
可以看到accept的返回类型是void,无返回
在这里插入图片描述
查看map源码层级关系
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
可以看到map是有返回值的,类型R为入参输入的类型
在这里插入图片描述
黄金指标优化代码:
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
IaaS黄金指标查询sql:
在这里插入图片描述
IaaS黄金指标查询数据筛选完成最终效果展示:
IaaS:{“IaaS”:{“物理内存使用率(Used)”:[{“name”:“物理内存使用率(Used)”,“host”:“133.0.210.62”,“value”:“84.98”},{“name”:“物理内存使用率(Used)”,“host”:“133.0.207.143”,“value”:“76.39”},{“name”:“物理内存使用率(Used)”,“host”:“133.0.208.173”,“value”:“69.60”},{“name”:“物理内存使用率(Used)”,“host”:“133.0.210.63”,“value”:“66.75”},{“name”:“物理内存使用率(Used)”,“host”:“133.0.206.173”,“value”:“63.96”},{“name”:“物理内存使用率(Used)”,“host”:“133.0.206.178”,“value”:“62.45”},{“name”:“物理内存使用率(Used)”,“host”:“133.0.206.190”,“value”:“61.91”},{“name”:“物理内存使用率(Used)”,“host”:“133.0.206.186”,“value”:“61.44”},{“name”:“物理内存使用率(Used)”,“host”:“133.0.206.185”,“value”:“61.35”},{“name”:“物理内存使用率(Used)”,“host”:“133.0.206.191”,“value”:“61.17”}],“文件系统分区使用率”:[{“name”:“(dba)/nvme1 文件系统分区使用率”,“host”:“133.0.206.185”,“value”:“87.00”},{“name”:“/data14 文件系统分区使用率”,“host”:“133.0.217.38”,“value”:“85.00”},{“name”:“/data13 文件系统分区使用率”,“host”:“133.0.217.38”,“value”:“84.00”},{“name”:“/data13 文件系统分区使用率”,“host”:“133.0.217.37”,“value”:“83.00”},{“name”:“/data14 文件系统分区使用率”,“host”:“133.0.217.37”,“value”:“82.00”},{“name”:“/data14 文件系统分区使用率”,“host”:“133.0.217.40”,“value”:“81.00”},{“name”:“/data13 文件系统分区使用率”,“host”:“133.0.217.40”,“value”:“80.00”},{“name”:“/data14 文件系统分区使用率”,“host”:“133.0.217.39”,“value”:“79.00”},{“name”:“/data13 文件系统分区使用率”,“host”:“133.0.217.39”,“value”:“78.00”},{“name”:“/ 文件系统分区使用率”,“host”:“133.0.208.173”,“value”:“77.00”}],“文件系统inode使用率”:[{“name”:“/data 文件系统inode使用率”,“host”:“133.0.209.81”,“value”:“2.00”},{“name”:“/boot 文件系统inode使用率”,“host”:“133.0.207.143”,“value”:“1.00”}],“虚拟内存使用率”:[{“name”:“虚拟内存使用率”,“host”:“133.0.217.111”,“value”:“100.00”},{“name”:“虚拟内存使用率”,“host”:“133.0.217.36”,“value”:“8.91”},{“name”:“虚拟内存使用率”,“host”:“133.0.209.6”,“value”:“0.81”},{“name”:“虚拟内存使用率”,“host”:“133.0.207.143”,“value”:“0.59”},{“name”:“虚拟内存使用率”,“host”:“133.0.210.62”,“value”:“0.46”},{“name”:“虚拟内存使用率”,“host”:“133.0.209.139”,“value”:“0.44”},{“name”:“虚拟内存使用率”,“host”:“133.0.217.52”,“value”:“0.32”},{“name”:“虚拟内存使用率”,“host”:“133.0.217.43”,“value”:“0.04”},{“name”:“虚拟内存使用率”,“host”:“133.0.210.36”,“value”:“0.02”},{“name”:“虚拟内存使用率”,“host”:“133.0.210.63”,“value”:“0.01”}],“CPU使用率”:[{“name”:“CPU使用率”,“host”:“133.0.207.143”,“value”:“89.80”},{“name”:“CPU使用率”,“host”:“133.0.207.210”,“value”:“58.30”},{“name”:“CPU使用率”,“host”:“133.0.207.209”,“value”:“41.60”},{“name”:“CPU使用率”,“host”:“133.0.210.72”,“value”:“27.80”},{“name”:“CPU使用率”,“host”:“133.0.207.144”,“value”:“27.60”},{“name”:“CPU使用率”,“host”:“133.0.209.5”,“value”:“22.00”},{“name”:“CPU使用率”,“host”:“133.0.210.69”,“value”:“18.20”},{“name”:“CPU使用率”,“host”:“133.0.210.64”,“value”:“15.60”},{“name”:“CPU使用率”,“host”:“133.0.210.71”,“value”:“14.10”},{“name”:“CPU使用率”,“host”:“133.0.217.38”,“value”:“13.90”}]}}
下面是经过去重后的排序数据,根据value去重+降序排序,最后取Top10前10条数据:
物理内存使用率(Used) top10:
在这里插入图片描述
文件系统分区使用率 top10
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
去重前的效果:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值