文章目录
今天小名看到一种有意思的业务代码写法,分享出来,希望能帮助到大家。
一、简述
切换数据库导致数据结构变化,通过Map<String,Object>来组装老接口中多表联查的出参
二、情景
今天小名遇到一个“老接口翻新”的需求,而且要求是 入参和出参 不能修改(即让调用这个接口的业务处不需要修改)。但是问题在于dao层由oracle数据库切换为mongodb,所以在表结构上是有很大区别,且新数据一部分在mongo中,一部分存在oracle中,为了拼凑出原先的出参,可以通过map,将两个dao查出的数据封装起来,将“关联关系”的多个字段作为Map的key(例如 “id-code”),再把两个对象分别装入Map的value中,通过比对key相等,来组合数据:
三、Code
公司项目不便发出来,所以这里模拟了一个demo。关键在于最后:双重for循环遍历key并对比,最终复制给dto
// 对象A(属性:UserId,Code,Name) HashMap<String,A> map1 =newHashMap<>();A a1 =newA();
a1.setUserId(123);
a1.setCode("e123bhg");
a1.setName("我是123");
map1.put(a1.getUserId+"-"+a1.getCode,a1);A a2 =newA();
a2.setUserId(456);
a2.setCode("e456hah");
a2.setName("我是456");
map1.put(a2.getUserId+"-"+a2.getCode,a2);// 对象B(属性:UserId,Code,NickName)HashMap<String,B> map2 =newHashMap<>();B b1 =newB();
b1.setUserId(123);
b1.setCode("e123bhg");
b1.setNickName("张三");
map2.put(b1.getUserId+"-"+b1.getCode,b1);B b2 =newB();
b2.setUserId(789);
b1.setCode("e789zhs");
b2.setNickName("赵四");
map2.put(b2.getUserId+"-"+b2.getCode,b2);// dto(属性:UserId,NickName)for(String key1: map1.keySet()){for(String key2: map2.keySet()){if(key1.equals(key2)){Dto dto =newDto();
dto.setUserId(map1.get(key1).getUserId())
dto.setNickName(map2.get(key2).getNickName())}}}
当然你也可以通过lambda的方式来简化代码。
如果你对Lambda还不是很了解,可以看下小名之前的文章了解后,尝试优化一下上面的demo~
Java8——入门篇
Java8——Stream篇
Java8——StreamAPI篇
好了,文章就到这里了,我们下篇见~
如若您在文章中发现任何错误的地方,希望您可以在评论区给予小名批评指正🤝 如果觉得小名的文章帮助到了您,支持一下小名😄,给小名的文章点赞👍、评论✍、收藏🤞谢谢大家啦~♥♥♥
版权归原作者 进阶的小名 所有, 如有侵权,请联系我们删除。