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

开发中,我常遇到这样的情况,就是一个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,主要就是比较的那部分。不知道有没有更优的解决办法,欢迎留言

 

 

posted @ 2024-01-25 16:52  多多指教~  阅读(30)  评论(0编辑  收藏  举报