您的位置:首页 > 其它

处理一个集合中的数据以父子形式展现

2017-05-14 15:05 323 查看
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;
}
}
//构建的下拉菜单model
public 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看结果是不是很清晰明了,可以自己测试一下,原理其就明白了了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: