java关于map用来筛选的用法

我有一个实体 PropTemplateItem{id,名称,父节点,模版id},父节点为root是定义为根节点。数据库

例如数据:  性能

001,颜色,root,123学习

002,白色,001,123spa

003,红色,001,1233d

004,配置,root,123对象

005,低配,004,123blog

006,高配,004,123配置

本身定义一个model(PropTemplateItemInfo模型,有一个根节点,有多个子节点)List

怎样才能把上述示例数据中存放到自定义模型里?model

1.经过数据库直接查询(先查出全部根节点,在遍历全部根节点查询起全部子节点)     与数据库交互太多,特别在数据量大了时缺点更明显

2.经过数据库查询出该模版下全部节点,而后经过遍历这个列表,判断为root节点的就在这个循环里面在遍历这个列表,找到父节点id等于这个root节点id的节点,放到本身定义模型里面去。遍历次数应该是n(list.size())*n 这是最容易想到的办法,但嵌套的遍历在数据量大时消耗的性能就比较高了

3.经过数据库查询出该模版下全部节点,经过map来存放筛选结果,遍历次数就只有n(list.size())*2

代码以下

第一次遍历这个列表时,找到全部root节点,放在map中,map的key就是他的id,而后新建一个PropTemplateItemInfo对象,把他的root节点放进去。

第二次遍历这个列表时,判断map里面是否存在这个key,若是存在,就把这个对象从map中取出来,把他的子节点的值add进那个map。

咱们最终要返回图中名为infoList的对象,由于图中2个循环中全在操做同一个名为tpl的对象,因此infoList中的tpl对象也会随之变化。

若有不足,请你们分享您的见解建议,互相学习,相互提升。

相关文章
相关标签/搜索