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.rhkb.cn/news/236700.html

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

相关文章

SqlAlchemy使用教程(一) 原理与环境搭建

一、SqlAlchemy 原理及环境搭建 SqlAlchemy是1个支持连接各种不同数据库的Python库&#xff0c;提供DBAPI与ORM&#xff08;object relation mapper&#xff09;两种方式使用数据库。 DBAPI方式&#xff0c;即使用SQL方式访问数据库 ORM, 对象关系模型&#xff0c;是用 Python…

apipost 前端使用云端mock实现自定义返回

目录 一.新建接口 1.选择mock环境 2.设置接口路径&#xff0c;以及相关参数 3.自定应响应示例 4.开启云端mock,设置相应条件 5.更改接口类型post,保存设置&#xff0c;发送请求 6.测试 一.新建接口 1.选择mock环境 如图&#xff0c;更改环境 2.设置接口路径&#xff0c…

【Leetcode】2696. 删除子串后的字符串最小长度

文章目录 题目思路代码 题目 2696. 删除子串后的字符串最小长度 思路 计算通过删除字符串中的 “AB” 和 “CD” 子串后&#xff0c;可获得的最终字符串的最小长度。 主要思路是使用一个栈来模拟字符串的处理过程&#xff0c;每次遍历字符串时&#xff0c;如果当前字符和栈…

【npm link】Node命令中的npm link命令的使用,还有CLI全局命令的使用,开发命令行工具必不可少的部分

&#x1f601; 作者简介&#xff1a;一名大四的学生&#xff0c;致力学习前端开发技术 ⭐️个人主页&#xff1a;夜宵饽饽的主页 ❔ 系列专栏&#xff1a;NodeJs &#x1f450;学习格言&#xff1a;成功不是终点&#xff0c;失败也并非末日&#xff0c;最重要的是继续前进的勇气…

Python基础知识:整理13 利用pyecharts生成折线图

首先需要安装第三方包pyecharts 1 基础折线图 # 导包&#xff0c;导入Line功能构建折线图对象 from pyecharts.charts import Line # 折线图 from pyecharts.options import TitleOpts # 标题 from pyecharts.options import LegendOpts # 图例 from pyecharts.options im…

Redis的优化

1 Redis的高可用 1.1 高可用的定义 在web服务器中&#xff0c;高可用是指服务器可以正常访问的时间&#xff0c;衡量的标准是在多长时间内可以提供正常服务&#xff08;99.9%、99.99%、99.999%等等&#xff09;。 但是在Redis语境中&#xff0c;高可用的含义似乎要宽泛一些&…

Python 全栈体系【四阶】(十二)

第四章 机器学习 十五、朴素贝叶斯 朴素贝叶斯是一组功能强大且易于训练的分类器&#xff0c;它使用贝叶斯定理来确定给定一组条件的结果的概率&#xff0c;“朴素”的含义是指所给定的条件都能独立存在和发生。朴素贝叶斯是多用途分类器&#xff0c;能在很多不同的情景下找到…

亚马逊云科技 WAF 部署小指南(五):在客户端集成 Amazon WAF SDK 抵御 DDoS 攻击...

方案介绍 在 WAF 部署小指南&#xff08;一&#xff09;中&#xff0c;我们了解了 Amazon WAF 的原理&#xff0c;并通过创建 WEB ACL 和托管规则防护常见的攻击。也了解了通过创建自定义规则在 HTTP 请求到达应用之前判断是阻断还是允许该请求。在 Amazon WAF 自定义规则中&am…

C++代码重用:继承与组合的比较

目录 一、简介 继承 组合 二、继承 三、组合 四、案例说明 4.1一个电子商务系统 4.1.1继承方式 在上述代码中&#xff0c;Order类继承自User类。通过继承&#xff0c;Order类获得了User类的成员函数和成员变量&#xff0c;并且可以添加自己的特性。我们重写了displayI…

HDFS WebHDFS 读写文件分析及HTTP Chunk Transfer Coding相关问题探究

文章目录 前言需要回答的问题DataNode端基于Netty的WebHDFS Service的实现 基于重定向的文件写入流程写入一个大文件时WebHDFS和Hadoop Native的块分布差异 基于重定向的数据读取流程尝试读取一个小文件尝试读取一个大文件 读写过程中的Chunk Transfer-Encoding支持写文件使用C…

数据结构与算法教程,数据结构C语言版教程!(第三部分、栈(Stack)和队列(Queue)详解)五

第三部分、栈(Stack)和队列(Queue)详解 栈和队列&#xff0c;严格意义上来说&#xff0c;也属于线性表&#xff0c;因为它们也都用于存储逻辑关系为 "一对一" 的数据&#xff0c;但由于它们比较特殊&#xff0c;因此将其单独作为一章&#xff0c;做重点讲解。 使用栈…

[自动驾驶算法][从0开始轨迹预测]:一、坐标和坐标系变换

既然要从0开始轨迹预测&#xff0c;那从哪开始写起呢&#xff1f;回想下自己的学习历程&#xff0c;真正有挑战性的不是模型结构&#xff0c;不是繁琐的训练和调参&#xff0c;而是数据的制作&#xff01;&#xff01;&#xff01; 笔者自认为不是一个数学基础牢固的人&#xf…

如何使用iPad通过Code App+cpolar实现公网地址远程访问vscode

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 ​&#x1f4ab;个人格言:“没有罗马,那就自己创造罗马~” 文章目录 1. 在iPad下载Code APP2.安装cpolar内网穿透2.1 cpolar 安装2.2 创建TCP隧道 3. iPad远程vscode4. …

删除的数据恢复

1回收站恢复 1.1回收站删除 新手删除是通过del键或者鼠标右键删除,这种删除是并不是真正的删除,而是放到了回收站 1.2回收站的数据恢复 回收站的数据,你要恢复那个直接右键还原即可,删除到回收站的数据并不能称得上是删除,回收站的本质也是一个文件夹,只不过是个特殊的文件…

《GreenPlum系列》GreenPlum初级教程-03GreenPlum系统管理

文章目录 第三章 GreenPlum系统管理1.关于GreenPlum数据库发布版本号2.启动和停止GreenPlum数据库2.1 启动数据库2.2 重启数据库2.3 仅重新载入配置文件更改2.4 停止GreenPlum数据库2.5 停止客户端进程 3.GreenPlum数据库状态查询4.访问GreenPlum数据库4.1 数据库会话参数4.2 支…

Camunda Spin

Spin 常用于在脚本中解析json或者xml使用&#xff0c;S(variable) 表示构造成Spin对象&#xff0c;通过prop(“属性名”)获取属性值&#xff0c;通过stringValue()、numberValue()、boolValue() 等对类型转换。 repositoryService.createDeployment().name("消息事件流程&…

Vim一键配置指南,打造高效率C++开发环境

文章目录 前言安装与卸载功能演示gcc/g升级问题 前言 Vim作为当下最受欢迎的文本编译器之一&#xff0c;不仅具有强大的文本编辑功能&#xff0c;还提供了高度的可定制性。用户可以根据自己的喜好自定义配置&#xff0c;并且通过自己编写插件或者使用现有的插件来扩展Vim的功能…

【PostgreSQL创建索引的锁分析和使用注意】

1.1 创建普通B-tree索引的整体流程 如下是梳理的创建普通B-tree索引的大概流程&#xff0c;可供参考。 1.校验新索引的Catalog元数据|语法解析 ---将创建索引的sql解析成IndexStmt结构&#xff5c;校验B-Tree的handler -----校验内核是否支持该类型的索引,在pg_am中查找&q…

AR HUD全面「上新」

AR HUD赛道正在迎来新的时代。 上周&#xff0c;蔚来ET9正式发布亮相&#xff0c;新车定位为D级行政旗舰轿车&#xff0c;其中&#xff0c;在智能座舱交互层面&#xff0c;继理想L系列、长安深蓝S7之后&#xff0c;也首次取消仪表盘&#xff0c;取而代之的是业内首个全焦段AR H…

thinkphp6报错Driver [Think] not supported.

thinkphp6报错Driver [Think] not supported. 问题解决方法测试 问题 直接使用 View::fetch();渲染模板报错 解决方法 这个报错是由于有安装视图驱动造成的 运行如下命令安装即可 composer require topthink/think-view官方文档中是这么写的 视图功能由\think\View类配合视…