java进阶||jdk进阶之循环

从18年学java到现在除了各种各样的数据类型和集合烧不了要遍历这些变量, for循环这时就少不了啦(当然还有8后引入的神器泛型)

先来看一段精髓业务代码, 使用了多个新特性当然也少不了循环和分支判断 代码较长解析在后面

private CommonPage<List<Object>> handleStandardAsphaltDiseases(CommonPage<List<AsphaltCementDiseaseInfoDO>> page) {
		Set<Map.Entry<String, LinkedHashMap<String, List<AsphaltCementDiseaseInfoDO>>>> entrySet = page.getData().stream()
				.collect(Collectors.groupingBy(AsphaltCementDiseaseInfoDO::getStakeDataYearMonth, LinkedHashMap::new, Collectors.groupingBy(AsphaltCementDiseaseInfoDO::getDiseaseName, LinkedHashMap::new, Collectors.toList())))
				.entrySet();

		//遍历entrySet集合
		for (Iterator<Map.Entry<String, LinkedHashMap<String, List<AsphaltCementDiseaseInfoDO>>>> it = entrySet.iterator(); it.hasNext();) {
			Map.Entry<String, LinkedHashMap<String, List<AsphaltCementDiseaseInfoDO>>> entry = it.next();
			//System.out.println(entry);
		}

		//for (Map.Entry<String, LinkedHashMap<String, List<AsphaltCementDiseaseInfoDO>>> entry : entrySet){
		//    Map<String, List<AsphaltCementDiseaseInfoDO>> diseaseNameMap = entry.getValue();
		//    System.out.println(diseaseNameMap);
		//}


		BigDecimal roadWidth = new BigDecimal("3.75");
		List<Object> result = Lists.newArrayList();
		for (Map.Entry<String, LinkedHashMap<String, List<AsphaltCementDiseaseInfoDO>>> entry : entrySet) {
			LinkedHashMap<String, List<AsphaltCementDiseaseInfoDO>> diseaseNameMap = entry.getValue();
			List<AsphaltCementDiseaseInfoDO> stripRepairs = diseaseNameMap.get(STRIP_REPAIR);
			boolean filled = CollectionUtils.isNotEmpty(stripRepairs);

			//AsphaltCementDiseaseInfoDO asphaltDo = new AsphaltCementDiseaseInfoDO();

			//声明纵裂和横裂两个数组
			List<AsphaltCementDiseaseInfoDO> longitudinalCracks = diseaseNameMap.getOrDefault(LONGITUDINAL_CRACK, Lists.newArrayList());
			List<AsphaltCementDiseaseInfoDO> transverseCracks = diseaseNameMap.getOrDefault(TRANSVERSE_CRACK, Lists.newArrayList());
			if(filled){
				for(AsphaltCementDiseaseInfoDO asphalt : stripRepairs){
					asphalt.setFilled(Boolean.TRUE);
					if (asphalt.getLength().doubleValue() < 4.3){
						longitudinalCracks.add(asphalt);
					}else {
						transverseCracks.add(asphalt);
					}
				}
			}
			int minLen = Math.min(longitudinalCracks.size(), transverseCracks.size());
			String[] stakeDataYearMonth = entry.getKey().split("\\|");
			BigDecimal chapBlockCrack = calculateChapBlockCrackArea(diseaseNameMap);
			for (int i = 0; i < minLen; i++) {

				StandardAsphaltDiseaseInfoVO standard = StandardAsphaltDiseaseInfoVO.builder()
						.dataYearMonth(stakeDataYearMonth[1])
						.stake(divide100(Long.valueOf(stakeDataYearMonth[0])))
						.roadWidth(roadWidth)
						.longitudinalCrack(buildCrack(longitudinalCracks.get(i)))
						.transverseCrack(buildCrack(transverseCracks.get(i)))
						.lineNo(page.getData().get(i).getLineNo())
						.dir(page.getData().get(i).getDir())
						.diseaseName(page.getData().get(i).getDiseaseName())
						.chapBlockCrack(i == 0 ? chapBlockCrack : null)
						.build();
				//标准表病害名称细分
				if (page.getData().get(i).getDiseaseName().equals("坑槽")){
					standard.setPits("坑槽");
				}
				if (page.getData().get(i).getDiseaseName().equals("泛油")){
					standard.setMeshCrack("泛油");
				}
				if (page.getData().get(i).getDiseaseName().equals("拥包")) {
					standard.setPacking("拥包");
				}
				if (page.getData().get(i).getDiseaseName().equals("网裂")) {
					standard.setMeshCrack("网裂");
				}

				result.add(standard);
			}
			if(longitudinalCracks.size() > minLen){
				int maxLen = longitudinalCracks.size();
				for (int i = minLen; i < maxLen; i++) {
					StandardAsphaltDiseaseInfoVO standard = StandardAsphaltDiseaseInfoVO.builder()
							.dataYearMonth(stakeDataYearMonth[1])
							.stake(divide100(Long.valueOf(stakeDataYearMonth[0])))
							.roadWidth(roadWidth)
							.longitudinalCrack(buildCrack(longitudinalCracks.get(i)))
							.transverseCrack(Crack.builder().build())
							.lineNo(page.getData().get(i).getLineNo())
							.dir(page.getData().get(i).getDir())
							.build();
					result.add(standard);
				}
			}
			if(transverseCracks.size() > minLen){
				int maxLen = transverseCracks.size();
				for (int i = minLen; i < maxLen; i++) {
					StandardAsphaltDiseaseInfoVO standard = StandardAsphaltDiseaseInfoVO.builder()
							.dataYearMonth(stakeDataYearMonth[1])
							.stake(divide100(Long.valueOf(stakeDataYearMonth[0])))
							.roadWidth(roadWidth)
							.longitudinalCrack(Crack.builder().build())
							.transverseCrack(buildCrack(transverseCracks.get(i)))
							.lineNo(page.getData().get(i).getLineNo())
							.dir(page.getData().get(i).getDir())
							//.diseaseName(page.getData().get(i).getDiseaseName())
							.build();
					result.add(standard);

				}
			}
		}
		CommonPage<List<Object>> resultPage = page.buildWithoutData();
		resultPage.setData(result);
		return resultPage;
	}

析:
里面涵盖了全部for循环的使用 ( 当然包含我注释掉提交的时候会删除了两种尝试 )

增强型和迭代还是有区别的
单纯从打印来看迭代的前面会有一坨东西, 这个也是Set集合中的一部分元素, 不过已经实现了业务这些可有可无, 所以建议还是使用迭代
在这里插入图片描述
防丢图及链接bak

![](https://s2.loli.net/2024/01/09/BfWnNiUsuo9JbOS.png)
下图是经CSDN外链识别后转成图, 见文末
强烈建议使用图传存储图片(防丢)

for循环现在常用的就三种

最常用

for(int i=0;i<= 10; i++){

}

增强型for循环

这个也叫for … each循环


第二个for循环:for (Map.Entry<String, LinkedHashMap<String, List<AsphaltCementDiseaseInfoDO>>> entry : entrySet) {...}
这个循环通过增强型for循环(也叫foreach循环)来遍历所有的键值对,每次取出一个键值对直接放到entry变量中,然后执行循环体内的代码。
两者的区别在于第一个循环使用了迭代器,可以通过迭代器的方法来控制遍历的过程,比如可以跳过某些元素、在遍历过程中删除元素等;而增强型for循环则比较简单,只能依次遍历每个元素。


Iterator迭代器

第一个for循环:Iterator<Map.Entry<String, LinkedHashMap<String, List<AsphaltCementDiseaseInfoDO>>>> it = entrySet.iterator(); while(it.hasNext()) { Map.Entry<String, LinkedHashMap<String, List<AsphaltCementDiseaseInfoDO>>>> entry = it.next(); ...}
//这个循环通过entrySet的迭代器来遍历所有的键值对,每次取出一个键值对放到entry变量中,然后执行循环体内的代码。

//另一个写法就是去掉外层for循环可以直接对元素进行迭代也更符合规范, 不过在正式开发中加上更容易区分


在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

NX二次开发PK获取对象类型

PK_ENTITY_ask_class(),获取对象类型建议用这个函数&#xff0c;比较通用&#xff0c;包含所有对象类型&#xff0c;可以替代UF_MODL_ask_edge_type(),UF_MODL_ask_body_type(),UF_MODL_ask_face_type()等函数 PK_ENTITY_t entity; PK_CLASS_t PK_TYPE; PK_ENTITY_ask_class(e…

ubuntu 22 搭建git服务

第一步&#xff0c;安装git&#xff1a; sudo apt-get install git 创建用户信息 git config --global user.name soft 第二步&#xff0c;创建一个git用户&#xff0c;用来运行git服务&#xff1a; sudo adduser git 创建git仓库的存储目录、更改文件目录属主为代码仓库…

观测云产品更新 | 日志、场景仪表板、监控器等

观测云更新 用户访问监测 &#xff08;RUM &#xff09; 公网 Dataway 支持 ip 转换成地理位置信息。 日志 > 查看器详情页 1、新增 BPF 网络日志采集及日志详情页&#xff0c;支持 Json 格式转化&#xff1b; 2、上述 1 中的日志详情页中新增可读的展示模式&#xff0c…

爬虫—响应页面乱码问题解决方法

爬虫—响应页面乱码问题解决方法 案例&#xff1a;腾牛网图片抓取 源代码如下&#xff1a; import requestsurl https://www.qqtn.com/wm/meinvtp_1.html headers {user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) …

牛客周赛 Round 1 解题报告 | 珂学家 | 分类计数 + 同余DP

前言 生于生时&#xff0c;亡于亡刻。遵从自心&#xff0c;尽人之事。 整体评价 终于等来了侧重面试的比赛&#xff0c;而且题量刚刚好&#xff0c;不超纲&#xff0c;不涉及算法竞赛。 第一场的比赛&#xff0c;感觉题目出的比较典&#xff0c;A是简单模拟&#xff0c;B则是…

springcloud sleuth分布式请求链路跟踪

简介 在微服务框架中&#xff0c;一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用来协同产生最后的请求结果&#xff0c;每一个前段请求都会形成一条复杂的分布式服务调用链路&#xff0c;链路中的任何一环出现高延时或错误都会引起整个请求最后的失败. S…

【深度学习每日小知识】Logistic Loss 逻辑回归

逻辑回归的损失函数 线性回归的损失函数是平方损失。逻辑回归的损失函数是对数损失&#xff0c;定义如下&#xff1a; L o g L o s s ∑ ( x , y ) ∈ D − y log ⁡ ( y ′ ) − ( 1 − y ) log ⁡ ( 1 − y ′ ) LogLoss\sum_{(x,y)\in D}-y\log(y)-(1-y)\log(1-y) LogLoss…

黑马程序员——2022版软件测试——乞丐版——day02

目录&#xff1a; 解决穷举场景 等价类划分法案例&#xff08;qq合法验证&#xff09;案例&#xff08;城市电话验证&#xff09;总结&#xff08;应用场景&#xff09;解决边界限制问题 步骤案例1案例2总结解决多条件有依赖关系测试 介绍步骤案例&#xff08;订单&#xff09…

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存(C#)

Baumer工业相机堡盟工业相机如何通过NEOAPI SDK实现相机的高速图像保存&#xff08;C#&#xff09;&#xff09; Baumer工业相机Baumer工业相机的图像高速保存的技术背景Baumer工业相机通过NEOAPI SDK函数图像高速保存在NEOAPI SDK里实现线程高速图像保存&#xff1a;工业相机高…

LLM主流框架:Causal Decoder、Prefix Decoder和Encoder-Decoder

本文将介绍如下内容&#xff1a; transformer中的mask机制Causal DecoderPrefix DecoderEncoder Decoder总结 一、transformer中的mask机制 在Transformer模型中&#xff0c;mask机制是一种用于在self-attention中的技术&#xff0c;用以控制不同token之间的注意力交互。具体…

Debezium发布历史64

原文地址&#xff1a; https://debezium.io/blog/2019/07/12/streaming-cassandra-at-wepay-part-1/ 欢迎关注留言&#xff0c;我是收集整理小能手&#xff0c;工具翻译&#xff0c;仅供参考&#xff0c;笔芯笔芯. 在 WePay 上流式传输 Cassandra - 第 1 部分 七月 12, 2019 …

HackTheBox - Medium - Linux - Faculty

Faculty Faculty 是一台中型 Linux 机器&#xff0c;具有 PHP Web 应用程序&#xff0c;该应用程序使用的库容易受到本地文件包含的影响。利用该库中的 LFi 会泄露一个密码&#xff0c;该密码可用于通过 SSH 以名为“gbyolo”的低级用户身份登录。用户“gbyolo”有权作为“dev…

Leetcode 剑指 Offer II 061. 查找和最小的 K 对数字

题目难度: 中等 原题链接 今天继续更新 Leetcode 的剑指 Offer&#xff08;专项突击版&#xff09;系列, 大家在公众号 算法精选 里回复 剑指offer2 就能看到该系列当前连载的所有文章了, 记得关注哦~ 题目描述 给定两个以升序排列的整数数组 nums1 和 nums2 , 以及一个整数 k…

【GNN2】PyG完成图分类任务,新手入门,保姆级教程

上次讲了如何给节点分类&#xff0c;这次我们来看如何用GNN完成图分类任务&#xff0c;也就是Graph-level的任务。 【GNN 1】PyG实现图神经网络&#xff0c;完成节点分类任务&#xff0c;人话、保姆级教程-CSDN博客 图分类就是以图为单位的分类&#xff0c;举个例子&#xff1…

服务器管理平台开发(3)- Web后端

Web服务端 整体架构采用前后端分离形式&#xff0c;后端使用Golang实现&#xff0c;参考Gin框架 1、后端服务 1.1、服务端架构 代码可参考Github开源项目&#xff1a;https://github.com/pbrong/hrms 1.2、服务地址 http://x.x.x.x:8000/api/v1/meta/info http://x.x.x.x:800…

算法第十七天-构造有效字符串的最少插入数

构造有效字符串的最少插入数 题目要求 解题思路 考虑abc的个数 假设答案有n个"abc"组成&#xff0c;那么需要插入的字符个数为 3 ∗ n − l e n ( s ) 3*n - len(s) 3∗n−len(s)。 对于相邻的两个字符x和y&#xff08;x在y左侧&#xff09;&#xff1a; 如果 x…

anaconda创建虚拟环境启动jupyter notebook

1.进入虚拟环境 &#xff08;以环境名为py37_pytorch1.9为例&#xff09; 创建虚拟环境: conda create -n py37_pytorch1.9 python3.7 查看已经创建的虚拟环境&#xff1a; ​​​​​​​conda env list 切换/进入环境&#xff1a; conda activate py37_pytorch1.9 删除环…

MathType绝对是我数学编辑的首选工具!

去年&#xff0c;微软曾说&#xff0c;要去掉Office里的公式编辑器&#xff0c;建议用户使用MathType编辑公式。目前Office用户可以到微软官网安装MathType的插件&#xff0c;现在免费使用&#xff0c;以后要收费。Word里安装这个插件以后&#xff0c;就会出现MathType的菜单。…

最好的 8 个解锁 Android 手机的应用程序分析

如何解锁我的 Android 手机是一个困扰全球数百万人的问题。有多种Android解锁器可用于解锁手机。用户应确保选择最好的应用程序以轻松满意地完成工作。必须注意的是&#xff0c;数据在解锁手机的整个过程中都是安全可靠的。此类应用程序还应该能够在所有情况下检索数据。 锁屏移…

论文阅读:Feature Refinement to Improve High Resolution Image Inpainting

项目地址&#xff1a;https://github.com/geomagical/lama-with-refiner 论文地址&#xff1a;https://arxiv.org/abs/2109.07161 发表时间&#xff1a;2022年6月29日 项目体验地址&#xff1a;https://colab.research.google.com/github/advimman/lama/blob/master/colab/LaMa…