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

来源:互联网 发布:武汉淘宝商学院骗局 编辑:程序博客网 时间: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