本文共 3273 字,大约阅读时间需要 10 分钟。
前端所示:
后端数据结构如下:
实现方式:
1、表结构如下:
2、添加Treeselect树结构实体工具类
import com.fasterxml.jackson.annotation.JsonInclude;import com.qingteng.soft.business.etm.member.bean.MemberTest;import java.io.Serializable;import java.util.List;import java.util.stream.Collectors;/** * Treeselect树结构实体类 */public class TreeSelect implements Serializable { private static final long serialVersionUID = 1L; /** * 节点ID */ private Long id; /** * 节点名称 */ private String label; /** * 子节点 */ @JsonInclude(JsonInclude.Include.NON_EMPTY) private List<TreeSelect> children; public TreeSelect() { } public TreeSelect(MemberTest dept) { this.id = dept.getPkId(); this.label = dept.getTestName(); this.children = dept.getChildren().stream().map(TreeSelect::new).collect(Collectors.toList()); }}
3、利用反向工程由数据库表结构生成对应实体类,并在实体类中添加如下字段,并设置对应get和set方法
/** 父名称 */private String parentName;private List<MemberTest> children = new ArrayList<MemberTest>();
4、service中添加如下代码:
public Map<String, Object> treeselect(MemberTest memberTest) { Map<String, Object> map = Maps.newHashMap(); List<MemberTest> memberTests = memberTestServiceImpl.queryAll(memberTest);//查询表中所有数据 List<MemberTest> memberTestTrees = buildTree(memberTests);//构建树结构 List<TreeSelect> collect = memberTestTrees.stream().map(TreeSelect::new).collect(Collectors.toList());//遍历对应的id和label map.put("data",collect); return map; } /** * 构建树结构 */ public List<MemberTest> buildTree(List<MemberTest> memberTests) { List<MemberTest> returnList = Lists.newArrayList(); List<Long> tempList = Lists.newArrayList(); for (MemberTest memberTest : memberTests) { tempList.add(memberTest.getPkId()); } for (Iterator<MemberTest> iterator = memberTests.iterator(); iterator.hasNext(); ) { MemberTest memberTest = iterator.next(); if (!tempList.contains(memberTest.getParentId())) { recursionFn(memberTests, memberTest); returnList.add(memberTest); } } if (returnList.isEmpty()) { returnList = memberTests; } return returnList; } /** * 递归列表 */ private void recursionFn(List<MemberTest> list, MemberTest t) { // 得到子节点列表 List<MemberTest> childList = getChildList(list, t); t.setChildren(childList); for (MemberTest tChild : childList) { if (hasChild(list, tChild)) { recursionFn(list, tChild); } } } /** * 得到子节点列表 */ private List<MemberTest> getChildList(List<MemberTest> list, MemberTest t) { List<MemberTest> tlist = new ArrayList<MemberTest>(); Iterator<MemberTest> it = list.iterator(); while (it.hasNext()) { MemberTest n = (MemberTest) it.next(); if (StringUtils.isNotNull(n.getParentId()) && n.getParentId().longValue() == t.getPkId().longValue()) { tlist.add(n); } } return tlist; } /** * 判断是否有子节点 */ private boolean hasChild(List<MemberTest> list, MemberTest t) { return getChildList(list, t).size() > 0 ? true : false; }
转载地址:http://ycse.baihongyu.com/