我曾遇到过的情况需要将多个DO模型转换成VO模型,由于DO模型中存在着的是ID集合,需要转换成VO中的集合,每一个ID集合都要进行一次批量查询,难免会有重复的ID,每一次查询都进行一次IO,消耗的时间是非常多的,(查询就会涉及到IO,有想了解的可以了解一下)所以我们可以保存要转换的所有的DO模型中的ID提取出来,保存为set集合,然后根据set集合的数据进行批量查询出所有的结果,保存到map集合中,键值对为 id :值,后面进行查询,就直接从集合中获取。
给出一个简单的例子:
下面是定义 DO 和 VO 的模型

public class StudentDO {private String id;private String studentName;private String classId;private List<String> courseIdList;public StudentDO() {}public StudentDO(String id, String studentName, String classId, List<String> courseIdList) {this.id = id;this.studentName = studentName;this.classId = classId;this.courseIdList = courseIdList;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getStudentName() {return studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}public String getClassId() {return classId;}public void setClassId(String classId) {this.classId = classId;}public List<String> getCourseIdList() {return courseIdList;}public void setCourseIdList(List<String> courseIdList) {this.courseIdList = courseIdList;}@Overridepublic String toString() {return "StudentDO{" +"id='" + id + '\'' +", studentName='" + studentName + '\'' +", classId='" + classId + '\'' +", courseIdList=" + courseIdList +'}';}
}
public class StudentVO {private String id;private String studentName;private ClassVO classInfo;private List<CourseVO> courseList;public StudentVO() {}public StudentVO(String id, String studentName, ClassVO classInfo, List<CourseVO> courseList) {this.id = id;this.studentName = studentName;this.classInfo = classInfo;this.courseList = courseList;}public String getId() {return id;}public void setId(String id) {this.id = id;}public String getStudentName() {return studentName;}public void setStudentName(String studentName) {this.studentName = studentName;}public ClassVO getClassInfo() {return classInfo;}public void setClassInfo(ClassVO classInfo) {this.classInfo = classInfo;}public List<CourseVO> getCourseList() {return courseList;}public void setCourseList(List<CourseVO> courseList) {this.courseList = courseList;}@Overridepublic String toString() {return "StudentVO{" +"id='" + id + '\'' +", studentName='" + studentName + '\'' +", classInfo=" + classInfo +", courseList=" + courseList +'}';}
}

具体的转换代码:先获取所有的id进行去重处理,进行批量查询放到map中

//获取courseVOSet<String> courseIds = new HashSet<>(); // 将 id 进行去重并排序for (StudentDO studentDO : studentList) {List<String> courseIdList = studentDO.getCourseIdList();courseIds.addAll(courseIdList);}List<String> courseIdList = new ArrayList<>(courseIds);//去重之后依然能够获取所有的课程信息,因为包含了所有的id 后面虽然不能一一对应 但是可以通过 id 来一一对应//listCourseByIds() 根据id集合来进行批量查询返回courseListList<CourseVO> courseVOS = courseService.listCourseByIds(courseIdList);//设置课程id和课程对应关系Map<String, CourseVO> courseMap = new HashMap<>();for (CourseVO courseVO : courseVOS) {courseMap.put(courseVO.getId(), courseVO);}

DO模型中根据id从map中获取 VO List

List<CourseVO> courseVOList = studentDO.getCourseIdList().stream().map(id -> courseMap.get(id)).collect(Collectors.toList());

此时就完成了操作,上述操作比起重复进行查询,或者是只用单一的查询,要节省很多的IO操作的时间,灵活使用map,虽然代码可能看起来变长了,但是效率变高了。

功能中进行频繁查询、提高查询效率的方法相关推荐

  1. 【Elasticsearch】使用Elasticsearch中的copy_to来提高搜索效率

    1.概述 转载:使用Elasticsearch中的copy_to来提高搜索效率 在今天的这个教程中,我们来着重讲解一下如何使用Elasticsearch中的copy来提高搜索的效率.比如在我们的搜索中 ...

  2. 键盘流的逆袭- Idea 中使用 VIM mode 提高生成效率

    Idea 中使用 VIM mode 提高生成效率 安装配置 Idea 的 vim 插件 先挖坑,后续再填.这个毫无技术含量,不写了,自己去搜吧. 快捷键代替鼠标 打开文件 按两下 shift 键 =& ...

  3. RLHF技术在智能医疗中的应用:提高医疗效率和准确性

    文章目录 1. 引言 技术基本概念和原理 1.强化学习基本原理 2.RLHF技术原理 应用场景 1.医学图像诊断 2.医学数据管理 3.智能药物设计 优势 1.考虑多级抽象特征 2.自适应学习 3.强 ...

  4. 有效提高工作效率的方法

    在我们的工作中最重要的不是看你付出了多少努力花了多少时间,而是看你的实际效率有多高.工作效率决定一个人的工作能力.下面小编就来为大家分享可以有效提高工作效率的方法. 1.拒绝拖延 基本上是每个人都会有 ...

  5. 提高工作效率的方法_4种提高工作效率的方法

    提高工作效率的方法 时间贫困-一种想法,就是没有足够的时间来完成我们需要做的所有工作-是感知还是现实? 事实是,您一天最多不会超过24小时. 长时间工作无济于事. 实际上,您在一天中工作的时间越长,生 ...

  6. 提高工作效率的方法有哪些

    工作效率的高低对我们的职场发展有着重要的影响,更高效率的工作可以让我们更快更好地完成任务,得到公司以及同事的认可.那么提高工作效率的方法有哪些呢? 1.有计划有总结 每天对当天需要做的任务,按照轻重缓 ...

  7. Centos5.5几种提高工作效率的方法

    Centos5.5几种提高工作效率的方法 1.通常在bash下输入不必把命令输入完全,bash就能判断出用户所要输入的命令,例如假设当前的目录包含以下文件和子目录 $ls zh888/  myblog ...

  8. (转)Oracle中通过位图索引提高查询效率

    本文转自:http://database.ctocio.com.cn/analysis/357/9390857.shtml 众所周知,索引可以在很大程度上提高数据库的查询效率.但是如果索引使用不当,如 ...

  9. mysql嵌套查询效率低,连接查询代替嵌套查询提高select效率

    当数据库中含有大量数据时,而我们所需要的信息不再是仅仅局限于一个表中的数据信息,这时我们需要将对一个表进行信息查询转而变成对多个表进行信息搜索并进行组合. 解决这样的问题我们通常是运用嵌套查询的方法, ...

  10. MySQL 异步查询提高查询速度

    本文解决什么问题 什么是 MySQL 异步查询 MySQL 异步查询的优缺点 一个例子 异步查询功能 MySQLi 扩展提供了异步查询功能,需要使用 mysqlnd ( MySQL Native Dr ...

最新文章

  1. 【OpenCV入门指南】第十三篇 人脸检测
  2. 人工智能学习--文本检测和识别综述(2021)
  3. volatile、static
  4. 「luogu2414」[NOI2011]阿狸的打字机
  5. 苹果自动驾驶测试车近距离实拍,头顶新添传感器和硬件
  6. ProtecTIER网关演绎重复数据删除的硬道理
  7. grpc+nginx架构部署指导
  8. 28.Linux/Unix 系统编程手册(上) -- 详述进程创建和程序执行
  9. 客户端 API 开发总结
  10. C语言程序设计实践-C语言应用实践
  11. STM32 FreeRTOS系列教程(一)FreeRTOS简介
  12. flash cs4 无法调试
  13. 互联网行业的常用黑话,你知道几条?
  14. 手机号中间四位变成****
  15. java导出乱码_导出文件乱码问题处理(java)
  16. 2020-10-27漫谈JWT(转载)
  17. 知网导出之Excel
  18. 高通平台开发系列讲解(充电篇)充电管理芯片PM7250B详解
  19. 调研字节码插桩技术,用于互联网分布式系统监控设计和实现!
  20. 攻防世界 MISC 高手进阶区 就在其中WP 解题思路

热门文章

  1. 交通强国,标准先行【附PPT】
  2. Axure RP 9.0.0.3727 授权码
  3. 广东python编程比赛
  4. 使用 IDEA 翻译插件
  5. 8-2 Android 摄像头和相册
  6. 蚂蚁借呗每月等额计算方式
  7. TCP报文( tcp dup ack 、TCP Retransmission)
  8. 订阅号 openid php,微信“订阅号”如何存放openid,并在其他页面使用
  9. 更改公众号名称对用户关注的影响
  10. 图解数组计算模块NumPy下(三角函数、四舍五入函数(around)、取整、将弧度转化为角度、统计分析函数、中位数、数组的排序、argsort()、lexsort())