zoukankan      html  css  js  c++  java
  • java关于map用来筛选的用法

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

    例如数据:  

    001,颜色,root,123

    002,白色,001,123

    003,红色,001,123

    004,配置,root,123

    005,低配,004,123

    006,高配,004,123

    自己定义一个model(PropTemplateItemInfo模型,有一个根节点,有多个子节点)

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

    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对象也会随之变化。

    如有不足,请大家分享您的看法建议,互相学习,相互提高。

  • 相关阅读:
    Mysql 数据库优化(五)sql语句优化【个人经验】转
    C# 编写的winform程序的托盘功能
    Mysql 数据库‘’函数‘、‘’事件‘’完成时间字段自动更新
    dd
    c# ‘using’三种用法
    集群、分布式、负载均衡
    iOS开发- Xcode 7添加pch文件
    iOS开发-pod install 出错 The dependency `AFNetworking (~> 2.6.0)` is not used in any concrete target.
    leetcode -- Find Median from Data Stream
    ubuntu14.04 LTS 更新源
  • 原文地址:https://www.cnblogs.com/lijiahong/p/6305786.html
Copyright © 2011-2022 走看看