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

导读:本篇文章讲解 处理一个集合中的数据以父子形式展现,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com

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看结果是不是很清晰明了,可以自己测试一下,原理其就明白了了微笑

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/14848.html

(0)
小半的头像小半

相关推荐

极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!