2017年7月30日---阶段性工作总结
来源:互联网 发布:在线视频gif制作软件 编辑:程序博客网 时间:2024/06/06 04:43
近期工作总结:
最近接触的是内蒙古移动渠道后台管理系统的一个项目,该项目已经上线。
我负责的内容只是优化他的一个树结构的回显。
该树一共有7个跟节点,原方式是在前台页面去递归然后去查询接口,这种方式我之前基本就没见过
也没想到他会是这么一个逻辑。他包含子节点的节点一共90多个,然后一次点击事件,展开这个树接口被调用了90多次。。。sql语句发了n条。
然后他有一个库是保存所有节点的库,另外一个库是保存已经选中节点的库。这样他两个库数据还需要去比对。
我是通过Map去做的,提高了效率。我一次查询所有的。然后直接返回整个树结构,这样以后加入redis也方便,比查好几次更方便用缓存。
// 构建ComboTree private ComboTree myComboTree(Object obj, ComboTreeModel comboTreeModel, Set inIDs) { ComboTree tree = new ComboTree(); Mapattributes = new HashMap (); ReflectHelper reflectHelper = new ReflectHelper(obj); String id = oConvertUtils.getString(reflectHelper.getMethodValue(comboTreeModel.getIdField())); tree.setId(id); tree.setPid(oConvertUtils.getString(reflectHelper.getMethodValue("这里定义pid"))); tree.setText(oConvertUtils.getString(reflectHelper.getMethodValue(comboTreeModel.getTextField()))); if (comboTreeModel.getSrcField() != null) { attributes.put("href", oConvertUtils.getString(reflectHelper.getMethodValue(comboTreeModel.getSrcField()))); tree.setAttributes(attributes); } if (inIDs == null) { } else { if (inIDs.size() > 0) { boolean add = inIDs.add(id);//为true 添加成功了,则说明该节点没有在被选中;为false则说明已经被选中了 if (!add) { tree.setChecked(true); } } } return tree; }
其中Object是你查询到的对象,这里也就是所有树的节点,ComboTreeModel是你要封装的对象模型,反射取属性的时候用的,Set集合是
已经选中的节点id的集合。他与总节点表是有关联的,就是他关联属性的set集合。
SetpIds = new HashSet (); Map > pIdMap = new HashMap >();
我把7个跟节点放入一个集合,把相同的pid的节点放入一个key为string,value为list<combotree>的集合,该集合有90多个这样的集合。
然后我去递归查询封装整个树。
private void abc(ComboTree comboTree, Map> pIdMap) { if (pIdMap.get(comboTree.getId()) != null) { comboTree.setChildren(pIdMap.get(comboTree.getId())); if (pIdMap.get(comboTree.getId()) != null) { for (ComboTree tree : pIdMap.get(comboTree.getId())) { abc(tree, pIdMap); } } } }
递归完成之后树中的数据就被填充满了。
补一段前面的代码,帮助理解。
for (Object obj : all) { ComboTree comboTree = new ComboTree(); comboTree = myComboTree(obj, comboTreeModel, inIDs); if (comboTree.getPid = null) { trees.add(comboTree); } else { boolean add = pIds.add(comboTree.getPid); if (add) {//如果pId添加进去了则说明第一次 pIdMap.put(comboTree.getPid, new ArrayList()); } else {//否则这个pId之前就已经被添加过了 pIdMap.put(comboTree, pIdMap.get(comboTree.getPid).add(comboTree)); } } }
阅读全文
0 0
- 2017年7月30日---阶段性工作总结
- 2017年7月25日---阶段性工作总结
- 2017年7月31日---阶段性工作总结(含大量数据的树的回显)
- 2017年8月10日---阶段性工作总结(事件驱动)
- 2017年8月22日---阶段性工作总结(跨域访问)
- |工作总结|2017年4月30日
- 2015年7月30日工作总结
- 2017年8月14日---阶段性工作总结(sp se框架中的一个简单方法源码分析)
- 2007年7月30日的工作总结
- 2013年01月30日 工作总结
- 2015年7月7日工作总结
- 2017年12月11日工作总结
- 2017年12月14日工作总结
- 2015年7月29日工作总结
- 2017年7月工作总结
- 2017年12月13日的工作总结
- 2017年12月15日的工作总结
- 2017年12月18日的工作总结
- 动态代理,静态代理
- Tensorflow训练mnist数据(完整版)
- cocos2d-x 之输入框,密码框
- OpenGL ES glGenTextures返回值为0
- (1)列表标签、图片标签、表格标签
- 2017年7月30日---阶段性工作总结
- POJ 3083 Children of the Candy Corn
- ?枚举类的
- 越前之路
- codeforces 264B Good Sequences(DP+灵活思维)【最长不互质序列模板】
- butter knife框架的使用
- 编程题(之字形打印矩阵)
- 算法与数学
- PMP 第七章 项目成本管理