系统指标优化 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
在这里插入图片描述

在这里插入图片描述

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/1536833.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

C语言深入理解指针(一)

目录 内存和地址内存编址的理解 指针变量和地址取地址操作符(&)指针变量和解引用操作符(*)指针变量如何拆解指针类型解引用操作符 指针变量的大小 指针变量类型的意义指针的解引用指针-整数 const修饰指针const修饰变量const修…

多态的相关知识

一.多态的概念 1.多态:多态是⼀个继承关系的下的类对象,去调⽤同⼀函数,产⽣了不同的⾏为。 2.多态分为编译时多态(静态多态)和运⾏时多态(动态多态)。 1>编译时多态(静态多态)主要就是函数重载和函数模板,他们传不同类型的…

Datawhale------Tiny-universe学习笔记——Qwen

1. Qwen整体介绍 对于一个完全没接触过大模型的小白来说,猛一听这个名字首先会一懵:Qwen是啥。这里首先解答一下这个问题。下面是官网给出介绍:Qwen是阿里巴巴集团Qwen团队研发的大语言模型和大型多模态模型系列。其实随着大模型领域的发展&a…

庆祝中华人民共和国成立75周年答题活

为庆祝中华人民共和国成立75周年,弘扬爱国主义精神,激发广大党员干部和人民群众奋进新征程、建功新时代,奋力推进中国式现代化建设的爱国热情,“学习强国”学习平台采用“线上答题线下竞赛”的形式,举办“学习强国 强国…

STM32外设之LTDC/DMA2D—液晶显示(野火)

文章目录 显示屏有几种?基本参数控制?显存 LTDC 液晶控制器LTDC 结构框图LTDC 初始化结构体 LTDC_InitTypeDefLTDC 层级初始化结构体 DMA2D 图形加速器DMA2D 初始化结构体 要了解什么 屏幕是什么,有几种屏,有什么组成。 怎么控制,不同屏幕控…

go多线程

1、简单使用(这个执行完成,如果进程执行比较久,这里不会等待它们结束) package mainimport "time"func main() {go func() {println("Hello, World!")}()time.Sleep(1 * time.Second) }2、wg.Add(数量)使用&…

借老系统重构我准备写个OpenAPI3.1版的API管理工具(附录屏演示)

前段时间一直在忙公司老系统重构的方案设计,其中最大的重构点就是前后端分离。为了加快前后端协同开发和对接的工作效率,我决定写一个公司内部使用的OpenAPI3.1版的API管理工具。 文章目录 有现成的工具为啥不用现有成熟方案初步成果展示录屏演示下一步计…

基于springboot酒店管理系统

酒店管理系统 552酒店管理系统 摘 要 21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认识向理性认识提高,管理工作的重要性已逐渐被人们所认识,…

医学数据分析实训 项目三 关联规则分析预备项目---购物车分析

文章目录 1 预备项目关联规则分析实践———购物车分析1 产生频繁集2 产生关联规则 1 预备项目 关联规则分析实践———购物车分析 import warnings import numpy as np import pandas as pd from mlxtend.frequent_patterns import apriori from mlxtend.frequent_patterns …

SpringBoot 消息队列RabbitMQ 消息可靠性 数据持久化 与 LazyQueue

介绍 在默认情况下,RabbitMQ会将接收到的信息保存在内存中以降低消息收发的延迟 一旦MO宕机,内存中的消息会丢失内存空间有限,当消费者故障或处理过慢时,会导致消息积压,引发MQ阻塞 在消息队列运行的过程中&#xf…

MFEA/D-DRA--基于分解和动态资源分配的多目标多任务优化

MFEA/D-DRA–基于分解和动态资源分配的多目标多任务优化 title: A Multiobjective multifactorial optimization algorithm based on decomposition and dynamic resource allocation strategy author: Shuangshuang Yao, Zhiming Dong, Xianpeng Wang…

Python编码系列—Python适配器模式:无缝集成的桥梁

🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…

C++进阶:二叉搜索树

✨✨所属专栏:C✨✨ ✨✨作者主页:嶔某✨✨ ⼆叉搜索树的概念 ⼆叉搜索树⼜称⼆叉排序树,它或者是⼀棵空树,或者是具有以下性质的⼆叉树: • 若它的左⼦树不为空,则左⼦树上所有结点的值都⼩于等于根结点的值 • 若…

tea 加密解密算法(面向ctf-reverse使用,光速学会tea逆向套路)

一,算法特征 tea算法的主要特征表现在sum和delta变量,以及3行核心加密中出现的右移4左移5,两行各有3个小括号互相异或 在题目中看到这些特征时就应该警醒这是tea相关算法 delta的值一般为0x9E3779B9(-0x61C88647),但题目中往往…

深入了解字符函数和字符串函数

前言:今天给大家深入理解一下字符函数 和 字符串函数。通过使用 和 模拟实现 带大家加深理解,让大家灵活使用。 字符函数 在C语言中,有一系列函数是专门做字符分类的,也就是一个字符属于什么类型的字符。 这些函数的使用都要包含…

IDEA复制代码到MD笔记格式还手动调,赶紧试试这个功能,一步到位

你是否曾经有过这种复制代码到笔记代码块的经历,选中后代码左侧有一些空格 然后粘到Markdown笔记里除第一行外,其他几行都要手动向前缩进,真是逼死强迫症啊 但是,其实idea工具中有一个“列选择模式”的功能,我们可以…

初中生物--5.单细胞生物

单细胞生物 单细胞生物整个身体只由一个细胞构成,是生物 圈中非常原始,形态微小、结构简单的一类生物。大多数生活在水域或湿润的环境中,也有寄生在 其他生物身体上 例如:大肠杆菌、眼虫、酵母菌、变形虫、衣藻、草履虫 草履虫 …

微信视频号导出视频软件

最近研究了一下微信视频号导出视频的方法,目前发现还是比较难搞,查了一些资料,写了一个可以导出视频的软件,目前还不完善,但是导出视频到本地还是没问题,先用着吧,后期再完善。先记录一下。 测…

linux网络编程1

24.9.16学习目录 一.TCP/IP协议简介1.TCP/IP的分层结构2.协议的简介 二、MAC地址和IP地址1.网卡2.MAC地址3.IP地址(1)IP地址的分类(2)IP地址的特点(3)回环IP地址 3.子网掩码4.端口(1&#xff09…

神经网络通俗理解学习笔记(5) 自然语言处理

自然语言处理 词嵌入和word2vec词义搜索和句意表示预训练模型Hugging Face库介绍经典NLP数据集代码案例-电影评论情感分析 词嵌入和word2vec 词嵌入是一种 将高维的数据表示映射到低维空间的方法 word embedding 是将语言中的词编码成向量便于后续的分析和处理 词嵌入和词向量…