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循环可以直接对元素进行迭代也更符合规范, 不过在正式开发中加上更容易区分

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【MyBatis】动态SQL

文章目录 前言增加操作\<trim>标签查询操作\<where>标签修改操作\<set>标签删除操作\<foreach>标签\<include>标签 前言 动态 SQL 是 MyBatis 的强大特性之一。如果你使用过 JDBC 或其它类似的框架&#xff0c;你应该能理解根据不同条件拼接 SQ…

超声波清洗机可以洗些什么东西?质量比较好的超声波清洗机推荐

超声波清洗机只能清洗眼镜吗&#xff1f;不是的&#xff01;超声波清洗机能够清洗的物品远比我们想象的还多&#xff0c;最常见的还是清洗眼镜&#xff0c;毕竟超声波清洗机最常见就是在眼镜店了&#xff0c;很多朋友都喜欢定期都眼镜店里来清洗一下眼镜&#xff0c;这个习惯其…

vivado Revision Control

2020.2 只需要git 管理 prj.xpr 和 prj.srcs/ https://china.xilinx.com/video/hardware/ip-revision-control.html Using Vivado Design Suite with Revision Control https://www.xilinx.com/video/hardware/vivado-design-suite-revision-control.html http://www.xi…

腾讯实验平台基于 StarRocks 构建湖仓底座

作者&#xff1a; 腾讯大数据平台部科学实验中心Tech Lead、专家工程师 马金勇博士 腾讯大数据平台部科学实验中心数据负责人、专家工程师 胡明杰 StarRocks Contributor、腾讯高级工程师 刘志行 在 2022 年&#xff0c;腾讯 A/B Test 团队启动了海外商业化版本 ABetterChoice …

企业网络两层和三层架构部署有何差异

知识改变命运&#xff0c;技术就是要分享&#xff0c;有问题随时联系&#xff0c;免费答疑&#xff0c;欢迎联系&#xff01; 厦门微思网络​​​​​​ https://www.xmws.cn华为认证\华为HCIA-Datacom\华为HCIP-Datacom\华为HCIE-Datacom Linux\RHCE\RHCE 9.0\RHCA\ Oracle OC…

html的全选反选

一、实验题目 html实现选择框的全选和反选 二、实验代码 <!DOCTYPE html> <html><head><meta charset"utf-8"><title>全选和反选</title></head><body><ul>兴趣爱好</ul><input id"all"…

Qt QML和QWidget混合编程(面试亮点)

​# QML的应用场景 1. 移动应用程序开发:QML可以用于开发移动应用程序,包括iOS、Android和其他移动平台。 2. 桌面应用程序开发:QML可以用于开发桌面应用程序,包括Windows、Mac和Linux系统。 3. 嵌入式系统开发:QML可以用于开发嵌入式系统,包括智能家居设…

IDC服务器算力如何计算?

环境&#xff1a; 数据中心服务器 问题描述&#xff1a; 服务器算力如何计算&#xff1f; 解决方案&#xff1a; 服务器的算力&#xff0c;可以考虑以下几个方面&#xff1a; 处理器&#xff08;CPU&#xff09;&#xff1a;处理器是服务器计算能力的核心。了解服务器所使…

【AI】 AIOTSummary

智能物联网(AIoT)是2018年兴起的概念,指系统通过各种信息传感器实时采集 各类信息(一般是在监控、互动、连接情境下的),在终端设备、边缘域或云中心 通过机器学习对数据进行智能化分析,包括定位、比对、预测、调度等。智能物联网(AIoT)是2018年兴起的概念,指系统通过…

两种实现WebSocket的方式,基于Java实现WebSocket。

首先我们声明WebSocker方便打字为ws。 WebSocker ws new WebSocket(); 1&#xff0c;首先是导包啦 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId></dependency> 或…

微软等开源评估ChatGPT、Phi、Llma等,统一测试平台

微软亚洲研究院、中国科学院自动化研究所、中国科学技术大学和卡内基梅隆大学联合开源了&#xff0c;用于评估、分析大语言模型的统一测试平台——PromptBench。 Prompt Bench支持目前主流的开源、闭源大语言模型&#xff0c;例如&#xff0c;ChatGPT、GPT-4、Phi、Llma1/2、G…

基于虚拟机安装centos且远程连接

基于虚拟机安装centos且远程连接 1、安装虚拟机 目前市面上的虚拟机种类有很多&#xff0c;我们可以选择自己熟悉的虚拟机进行安装&#xff0c;我在这里用的虚拟机是VMware。具体的安装过程很简单&#xff0c;一直点击下一步就可以了。因为VMware虚拟机需要激活&#xff0c;所…

UniApp面试题

面试题1 问&#xff1a;什么是 UniApp&#xff1f;它有哪些特点&#xff1f; 答&#xff1a;UniApp 是一种基于 Vue.js 开发跨平台应用的框架。它可以同时构建运行在多个平台&#xff08;包括但不限于小程序、H5、App&#xff09;的应用程序。UniApp 的特点包括&#xff1a;一…

AI语音识别模块--whisper模块

1.下载 ffmpeg&#xff0c;挑一个自己电脑系统的版本&#xff0c;下载&#xff0c;如我win64&#xff1a; 地址&#xff1a; Releases BtbN/FFmpeg-Builds GitHub 下载压缩包zip&#xff0c;到本地 解压安装&#xff0c;其实无需安装&#xff0c;只需把对应的目录下的bin&…

【Matlab】在Matlab中安装优化工具yalmip的方法

最近博主想做一些关于多目标优化的问题&#xff0c;因为之前对Matlab有一定经验&#xff0c;所以直接在网上查找了如何在Matlab上实现多目标优化的文献&#xff0c;看到有人提到了yamip&#xff0c;于是博主就试着在Matlab中安装yamip&#xff0c;将其中遇到的问题和一些经验和…

JMeter相关问题及答案(2024)

1、什么是 JMeter&#xff1f; JMeter是一个开源的、Java编写的负载测试工具&#xff0c;用于对软件和服务进行性能测试。它最初是为测试Web应用程序而设计的&#xff0c;但现在已广泛应用于测试其他协议和技术&#xff0c;如HTTP、HTTPS、SOAP、RESTful、FTP、数据库、JMS等。…

正式阶段高等数学复习--导数的定义

导数的定义这一部分知识点包括&#xff1a;导数的概念、微分的概念、导数与微分的几何意义、连续可导可微之间的关系&#xff1b;而题型呢包含有已知导数求极限&#xff08;凑&#xff09;&#xff0c;已知极限求可导&#xff0c;判断分段函数或者&#xff08;F(x)f(x)*g(x),f(…

香橙派--编译MNN报错,关于汇编的嵌套展开

先看报错&#xff1a; /home/orangepi/MNN-master/source/backend/cpu/arm/arm64/bf16/ARMV86_MNNPackedMatMulRemain_BF16.S:158: Fatal error: macros nested too deeply再看代码&#xff1a; PostTreatLH8:FMAX v9, v15, v16, v17, v18FMAX v9, v19, v20, v21, v22FMAX v9…

缓存学习实战篇

缓存练习题&#xff08;用户查询操作&#xff09; public List<ShopType> queryAllType() throws JsonProcessingException {//从缓存中查数据String shopTypeJson stringRedisTemplate.opsForValue().get("cache:shopType");//如果缓存命中&#xff0c;if (S…

1.7用REST API实现dynv6脚本(上)

专栏导航 第六章 用命令得到ip和域名解析<网络> 第七章 用REST API实现dynv6脚本(上) ⇐ 第八章 用REST API实现dynv6脚本(下) 用折腾路由的兴趣,顺便入门shell编程。 文章目录 专栏导航前言一、正则表达式基础二、梅林自定义ddns-start1、API选择2、流程图三、代码实…