我们会经常用到树形,那么树形结构的数据是在前端做还是在后台做呢?
我自己用过前端的ztree,selectTree等这些属于前端的组件,后台只需要把一个表的所有数据返回给前段就可以,前端可以通过id,pid来把层级结构划分,要是我们前端需要后台直接返回树结构数据怎么办,那么接下来我给大家介绍一下我写过的例子。
我们先看一张图了解一下树结构,我这里随便找一张图了解一下即可。
接下来我们看一下数据,主要包括id,pid,名称
接下来我们写一个小例子,用递归方式转换为数
实体:
package cn.ccccltd.ccccoi.mediumterminvestment.domain;
import java.io.Serializable;
import java.util.List;
/**
* @Description:返回前端,业务模块
* @author yujiaqi
* @date: 2019年9月9日下午2:07:19
*/
public class ProjectBasicInfoDTO implements Serializable {
private static final long serialVersionUID = 1L;
private String id;
private String pId;
private String key;
private String title;
private String value;
private List children;
private Boolean selectable;
private Boolean disableCheckbox;
private Boolean disabled;
public String getId() {
return id;
}
public String getValue() {
return value;
}
public void setValue(String value) {
this.value = value;
}
public void setId(String id) {
this.id = id;
}
public String getpId() {
return pId;
}
public void setpId(String pId) {
this.pId = pId;
}
public String getKey() {
return key;
}
public void setKey(String key) {
this.key = key;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public List getChildren() {
return children;
}
public void setChildren(List children) {
this.children = children;
}
public Boolean getSelectable() {
return selectable;
}
public void setSelectable(Boolean selectable) {
this.selectable = selectable;
}
public Boolean getDisableCheckbox() {
return disableCheckbox;
}
public void setDisableCheckbox(Boolean disableCheckbox) {
this.disableCheckbox = disableCheckbox;
}
public Boolean getDisabled() {
return disabled;
}
public void setDisabled(Boolean disabled) {
this.disabled = disabled;
}
public static long getSerialversionuid() {
return serialVersionUID;
}
}
service实现类
/**
* 查询投资项目资金来源
*/
@Override
public List queryFundingSource() {
//查询投资项目资金来源
List list = projectBasicInfoMapper.queryDictionaryBean(Constant.FUNDING_SOURCE,Constant.DELFLAG);
List dataProcessing = ProjectBasicInfoServiceImpl.dataProcessing(list);
List buildByRecursive = TreeUtils.buildByRecursive(dataProcessing);
return buildByRecursive;
}
/**
* 将字典数据遍历放入ProjectBasicInfoDTO实体中
* @param list
* @return
*/
public static List dataProcessing(List list){
List list1 = Lists.newArrayList();
for (DictionaryBean dictionaryBean : list) {
ProjectBasicInfoDTO projectBasicInfoDTO = new ProjectBasicInfoDTO();
projectBasicInfoDTO.setId(dictionaryBean.getItemId());
projectBasicInfoDTO.setpId(dictionaryBean.getItemParentId());
projectBasicInfoDTO.setKey(dictionaryBean.getItemId());
projectBasicInfoDTO.setTitle(dictionaryBean.getItemFullName());
projectBasicInfoDTO.setValue(dictionaryBean.getItemFullName());
projectBasicInfoDTO.setSelectable(false);
projectBasicInfoDTO.setDisableCheckbox(true);
projectBasicInfoDTO.setDisabled(true);
list1.add(projectBasicInfoDTO);
}
return list1;
}
递归方法工具类
package cn.ccccltd.ccccoi.mediumterminvestment.util;
import java.util.ArrayList;
import java.util.List;
import cn.ccccltd.ccccoi.mediumterminvestment.domain.ProjectBasicInfoDTO;
public class TreeUtils {
/**
* 使用递归方法建树
* @param treeNodes
* @return
*/
public static List buildByRecursive(List projectBasicInfoDTOs) {
List trees = new ArrayList();
for (ProjectBasicInfoDTO projectBasicInfoDTO : projectBasicInfoDTOs) {
if ("".equals(projectBasicInfoDTO.getpId()) || projectBasicInfoDTO.getpId() == null ) {
trees.add(findChildren(projectBasicInfoDTO,projectBasicInfoDTOs));
}
}
return trees;
}
/**
* 递归查找子节点
* @param treeNodes
* @return
*/
public static ProjectBasicInfoDTO findChildren(ProjectBasicInfoDTO projectBasicInfoDTO,List projectBasicInfoDTOs) {
for (ProjectBasicInfoDTO projectBasicInfoDTO2 : projectBasicInfoDTOs) {
if(projectBasicInfoDTO.getId().equals(projectBasicInfoDTO2.getpId())) {
if(projectBasicInfoDTO.getChildren() == null) {
projectBasicInfoDTO.setChildren(new ArrayList());
}
//是否还有子节点,如果有的话继续往下遍历,如果没有则直接返回
projectBasicInfoDTO.getChildren().add(findChildren(projectBasicInfoDTO2,projectBasicInfoDTOs));
}
}
return projectBasicInfoDTO;
}
}
树结构效果图
以上为后台处理树结构小demo,重点为递归那个工具类。
文源网络,仅供学习之用,如有侵权,联系删除。