首页 > 其他分享 >关于list里面对象某个字段的值和map的key对比

关于list里面对象某个字段的值和map的key对比

时间:2024-01-25 17:01:35浏览次数:30  
标签:map WorkstationGroup list collect 字段 key new

开发中,我常遇到这样的情况,就是一个list集合里面装了10个对象,好多条数据某个字段(A字段)的值是想同的,通过这个字段去确定另外一个值(B字段),就会拿着这个A字段去查询别的表,然后再给B字段赋值,但这有个问题,就是遍历10次去查询,那么数据库的IO交互就很多次。

对于这个解决这个问题,我是这样处理的:

1、先将对象获取到A字段的值,进行去重(得到一个list)

1 List<String> collect = list.stream().map(WorkstationGroup::getGroupId).collect(Collectors.toList());

 

2、将去重后的list去数据库查询,假设得到3条数据,这样就由原先的10次数据交互就变为1次,然后将这个3条数据通过stream流变为一个map对象。

1 Map<String, String> map = list.stream().collect(Collectors.toMap(WorkstationGroup::getGroupId, WorkstationGroup::getGroupName));

 

3、将list遍历,将list的A字段和map里面的key比较,相同的话,就把map的value赋值给B字段。

demo代码如下:

 1        List<WorkstationGroup> list = new ArrayList<>();
 2         WorkstationGroup workstationGroup1 = new WorkstationGroup();
 3         workstationGroup1.setGroupId("aaa");
 4         WorkstationGroup workstationGroup2 = new WorkstationGroup();
 5         workstationGroup2.setGroupId("aaa");
 6         WorkstationGroup workstationGroup3 = new WorkstationGroup();
 7         workstationGroup3.setGroupId("aaa");
 8         WorkstationGroup workstationGroup4 = new WorkstationGroup();
 9         workstationGroup4.setGroupId("bbb");
10         WorkstationGroup workstationGroup5 = new WorkstationGroup();
11         workstationGroup5.setGroupId("bbb");
12         list.add(workstationGroup1);
13         list.add(workstationGroup2);
14         list.add(workstationGroup3);
15         list.add(workstationGroup4);
16         list.add(workstationGroup5);
17         Map<String,String> map = new HashMap<>();
18         map.put("aaa","张三");
19         map.put("bbb","李四");
20         List<WorkstationGroup> collect = list.stream().map(e -> {
21             for (String s : map.keySet()) {
22                 if (e.getGroupId().equals(s)){
23                     e.setGroupName(map.get(s));
24                 }
25             }
26             return e;
27         }).collect(Collectors.toList());
28         System.out.println("collect = " + collect);

关于查询数据库就没写了,我就直接写了一个结果list,map,主要就是比较的那部分。不知道有没有更优的解决办法,欢迎留言

 

 

标签:map,WorkstationGroup,list,collect,字段,key,new
From: https://www.cnblogs.com/qwg-/p/17987481

相关文章

  • 2024年1月Java项目开发指南5:controller、service、mapper
    准备工作你知道什么是JSON吗?JSON是什么?格式是什么?有什么用?有什么优点?有什么缺点?请自己百度探索一下,对JSON做了个了解,如果你不知道什么是JSON的话,知道就免了,直接下一步吧。开始:项目目录结构先确保你已经创建了上图的那些文件夹。这都是我们需要用到。简单的做个介绍co......
  • C转C++速成浅入浅出系列——STL之map
    本系列为应付考研复试用,知识浅入浅出,很多地方不深究细节原理;如有谬误,欢迎大家指出。map【map:地图、图谱】理解为地图(我感觉跟python的字典【dictionary】一样)。一个map中包含了多个键值对,一个键值对可以理解为一个特殊的结构体。键值对:即包含关键字(即key)和值(即value或data)的......
  • nmap命令的用法
    Nmap简介Nmap是一款非常强大的主机发现和端口扫描工具,而且nmap运用自带的脚本,还能完成漏洞检测,同时支持多平台。官网一般情况下,Nmap用于列举网络主机清单、管理服务升级调度、监控主机或服务运行状况。Nmap可以检测目标机是否在线、端口开放情况、侦测运行的服务类型及版本信......
  • LinkedList(Deque)中添加/删除方法
    转:https://www.jianshu.com/p/ae28d514003c 1简介最近在使用LinkedList/Deque的时候,发现其中有很多类似的方法,我就想简简单单做个添加/删除的操作,发现竟然有那么多类似的方法,比如“添加”操作可以用的方法有:add/offer/push/offerFirst/offerLast,“删除”操作可以用......
  • 2024AAAI_SGNet Structure Guided Network via Gradient-Frequency Awareness for Dep
    1.任务描述: 给定输入LR深度图和HRRGB图像,引导DSR目的是在ground-truth深度图监督的条件下,预测HR深度图2.Network本文提出的SGNet主要包括两部分,即梯度校准模块(GCM)和频率感知模块(FAM)。首先将RGB图像和上采样后的LR深度图送入到GCM,利用RGB丰富的梯度信息在梯度域中......
  • jdk的keytool生成jks和获取jks的信息,公匙
     1.生成jks。执行命令:keytool-genkeypair-aliasmytest-keyalg RSA-keypassmypass-keystoremytest.jks-storepassmypass-keystorejks文件保存路径生成的mytest.jks证书中包含我们的密钥:公钥和私钥。2.利用"keytool-list-v-keystoretest.jks"查看JKS中生......
  • 学习Java8中StreamAPI的笔记
    本次笔记记录一下我自己学习Stream流的一个情况。第一种:使用Stream流来代替增强for循环进行赋值:这是使用增强for循环的写法:publicstaticvoidmain(String[]args){ArrayList<String>strings=newArrayList<>();strings.add("张三");strings.add("李四");strings.add......
  • Map集合做投票功能
    1publicstaticvoidmain(String[]args){2//学生选景点a,b,c,d四个景点,80个学生3String[]scene={"A","B","C","D"};4StringBuildersb=newStringBuilder();5Randomr=newRand......
  • git创建SSH keys
    git出现Pleasemakesureyouhavethecorrectaccessrightsandtherepositoryexists,需要创建SSHkeys。步骤:1、打开Git.bash进行命令行界面输入代码如下: gitconfig--globaluser.name"YourName"#配置user.namegitconfig--globaluser.email"your_email@exa......
  • AWS ECS + CloudMap + Lambda workshop (一)
    第一篇:创建一个由ECS托管的nodejs服务一)创建拥有AdministratorAccess的IAMUser,在权限设置时,直接给予AdministratorAccess二)ECR服务注册代码仓库输入名称,完成Copy镜像库的URIXXXXXXXX.dkr.ecr.cn-northwest-1.amazonaws.com.cn/nodejs-test-app使用docker命令上传代......