处理一个集合中的数据以父子形式展现
来源:互联网 发布:武汉淘宝商学院骗局 编辑:程序博客网 时间:2024/06/08 02:15
1大家在开发的时候,前端处理父子处理存在级联关系的下拉框,或者展示数据时以父子形式展示,如果级联的数据比较多,处理起来效率不高,还比较麻烦,
如果后端在返回list数据时,能够将父子关系处理好返回,这样前端处理起来就简单,开发效率也就高了。
2所以搞了一个小工具,直接上源码,如果看不懂可以自己去检验一下就明白原理了。
//model实体
public class SysOrg implements Serializable { /** * */ private static final long serialVersionUID = 9133631499822051115L; private Long id; private Long pid; private String orgName; public Long getId() { return id; } public void setId(Long id) { this.id = id; } public Long getPid() { return pid; } public void setPid(Long pid) { this.pid = pid; } public String getOrgName() { return orgName; } public void setOrgName(String orgName) { this.orgName = orgName; }}
//构建的下拉菜单modelpublic class DropdownItem implements Serializable { /** * */ private static final long serialVersionUID = -631110845195677461L; /** * 显示标签 */ private String label; /** * 选中值 */ private Object value; /** * 子项 */ private List<DropdownItem> children = new ArrayList<DropdownItem>(); public String getLabel() { return label; } public void setLabel(String label) { this.label = label; } public Object getValue() { return value; } public void setValue(Object value) { this.value = value; } public List<DropdownItem> getChildren() { return children; } public void setChildren(List<DropdownItem> children) { this.children = children; }}
/** * 下拉数据构建工具,将查询到的list转换成下拉数据的工具类,只需要传入list,设置labelField,valueField,parentField可选 * */public class DropdownBuilder { /** * 下拉数据 */ @SuppressWarnings("rawtypes") private List list; /** * 内容字段 */ private String labelField; /** * 值字段 */ private String valueField; /** * 构建子项字段 */ private String parentField; private DropdownBuilder() {} public static DropdownBuilder create() { return new DropdownBuilder(); } @SuppressWarnings("rawtypes") public DropdownBuilder setList(List list) { this.list = list; return this; } public DropdownBuilder setLabelField(String labelField) { this.labelField = labelField; return this; } public DropdownBuilder setValueField(String valueField) { this.valueField = valueField; return this; } public DropdownBuilder setParentField(String parentField) { this.parentField = parentField; return this; } /** * 构建下拉菜单数据 * * @return */ public List<DropdownItem> build() { if (CollectionUtils.isEmpty(list)) { return Collections.emptyList(); } List<DropdownItem> rtnList = new ArrayList<DropdownItem>(); try { Map<String, DropdownItem> map = new HashMap<String, DropdownItem>(); for (Object obj : list) { String label = BeanUtils.getProperty(obj, labelField);//根据定义的lableFiled(比如id)取sysorg对象中id值作为DropdownItem中的labe if (StringUtils.isEmpty(label)) { //ExceptionUtils.wrapBusiException("{}标签值不能为空", labelField); } String value = BeanUtils.getProperty(obj, valueField);//取orgName属性值作为DropdownItem中的value值 if (StringUtils.isEmpty(value)) { //ExceptionUtils.wrapBusiException("{}值不能为空", valueField); } String parent = null; if (StringUtils.isNotEmpty(parentField)) { parent = BeanUtils.getProperty(obj, parentField); } DropdownItem item = new DropdownItem(); item.setLabel(label); item.setValue(value); map.put(value, item); if (StringUtils.isNotEmpty(parent)) { DropdownItem parentItem = map.get(parent); if (parentItem != null) { parentItem.getChildren().add(item); } else { rtnList.add(item); } } else { rtnList.add(item); } } } catch (Exception e) { //ExceptionUtils.marshException(ICommonResponse.FAIL_CODE, "获取下拉属性错误", e); } return rtnList; }}
public static void main(String[] args) { List<SysOrg> list = new ArrayList<SysOrg>(); SysOrg org1 = new SysOrg(); org1.setId(1L); org1.setOrgName("测试1"); org1.setPid(0L); list.add(org1); SysOrg org2 = new SysOrg(); org2.setId(2L); org2.setOrgName("测试2"); org2.setPid(1L); list.add(org2); SysOrg org3 = new SysOrg(); org3.setId(3L); org3.setOrgName("测试3"); org3.setPid(0L); list.add(org3); SysOrg org4 = new SysOrg(); org4.setId(4L); org4.setOrgName("测试4"); org4.setPid(2L); list.add(org4); List<DropdownItem> ddl = DropdownBuilder.create().setList(list).setLabelField("orgName").setValueField("id").setParentField("pid").build(); System.out.print(JSON.toJSONString(ddl, true)); }
3测试结果
4看结果是不是很清晰明了,可以自己测试一下,原理其就明白了了
0 0
- 处理一个集合中的数据以父子形式展现
- Highcharts将数据以图表的形式展现
- 数据以报表形式展现的实现方法研究
- 数据以报表形式展现的实现方法研究
- 以对象形式处理数据
- MVC架构下将查询到的数据以表格形式展现出来
- Android从外部API获取json数据并以listview形式展现
- 金额降序排序后如何以柱形图的形式将数据展现出来
- flask数据用ECharts图表形式展现
- 如何展现字段名和值均以字符串形式保存到第三方表的数据集
- android activity以dialog形式展现,强大的原生!
- Activity以对话框Dialog形式展现(显示大图)
- 将dataGridView中的数据全选并以txt形式保存
- 把一个List<String>集合中的数据用分隔符分开,并以字符串展示出来
- 给定任意一个目录,以树形方式展现出该目录中的子目录和文件
- 70. 在XPages中展现集合数据
- 以Exel形式导出数据
- 以数组形式获取数据
- [实训]如何用eclipse创建用户库
- 模式的秘密——单例模式
- Linux下的虚拟地址映射详解(一)逻辑地址到线性地址的映射
- 技术人的未来在哪里?
- 【面向对象】这些基本概念,你都了解了吗(上)
- 处理一个集合中的数据以父子形式展现
- 43.连接 Internet
- java 求n的阶乘尾部0的个数
- python bind()方法
- 权威报告】WanaCrypt0r勒索蠕虫完全分析报告
- 由矩阵转置引发的一系列思考(线性代数的核心)
- Android CountDownTimer倒计时器的使用
- linux 下查看文件的完整时间信息
- 标准库类型vector