巧用java8的stream流的.collect(Collectors.toMap(arg1,arg2))

巧用java8的stream流的.collect(Collectors.toMap(arg1,arg2))

码农世界 2024-05-29 前端 80 次浏览 0个评论

最近公司接手了一个低代码二次开发平台的需求,需要连接多张表的数据然后展示到界面上。

按照java的sql思路,我们直接通过left join去关联表就行了,但是该低代码平台有对sql连表查询有限制,就是有些表它是存在一个domainKey的,实体表的domainKey如果不相同的话连表是不允许的。所以就无法使用连表了。

那么我的做法就是直接查询一张表,然后把需要连表的那些id都查询来,

也就是select xxx,xxx,xxx_id,yyy_id,ddd_id from xxx_table.

然后执行完sql之后的返回结果res进行解析。

一开始我是直接想在for循环里面,每一次遍历就调用一次sql通过id去查表。但是这样不行。不能在for循环,每次遍历去调用sql,这样会占用sql连接,造成资源占据大的情况。

所以最终的想法,就是单独查询xxx_id对应表名的数据,查询xxx_id对应表名的数据,查询ddd_id对应表名的数据。

然后再将每个sql对应的数据进行map映射成下面这中结构:

Map => Map

现在我写出一个例子:

然后我们就可以在遍历的时候,直接调用该方法就行了。

如下:

testDBResult.stream().foreach((arg) -> {
    arg.setXXXName(map.get(arg.getXXXId()) == null ? "" : map.get(arg.getXXXId()).getXXXName());
    arg.setYYYName(map.get(arg.getYYYId()) == null ? "" : map.get(arg.getYYYId())).getYYYName();
    arg.setDDDName(map.get(arg.getDDDId()) == null ? "" : map.get(arg.getDDDId())).getDDDName();
})

总结:

        巧用java8的stream流的.collect(Collectors.toMap(arg1,arg2))适用于通过返回结果的id查对应表的某一个数据。当然可以直接连表是最好的。

最后:

        如果大家觉得这篇文章对你们有所帮助的话,麻烦点个免费的赞赞,也祝各位码农在未来的IT的道路上越走越远,谢谢。

转载请注明来自码农世界,本文标题:《巧用java8的stream流的.collect(Collectors.toMap(arg1,arg2))》

百度分享代码,如果开启HTTPS请参考李洋个人博客
每一天,每一秒,你所做的决定都会改变你的人生!

发表评论

快捷回复:

评论列表 (暂无评论,80人围观)参与讨论

还没有评论,来说两句吧...

Top