Java三級菜單工具類實現(xiàn)方式
Java通用三級菜單工具類
通常在寫三級菜單時會使用遞歸方式去寫,但是時間長了會發(fā)現(xiàn)很多重復的代碼一直在寫,改,也就改幾個名字。
實現(xiàn)方式
抽象屬性結構
常用的三個字段,子級id、父級id、其次是數組children。
將返回對象或者是三級菜單對象實現(xiàn)這個類。
import java.util.List;
public interface AbstractTreeNode {
// 子級id
Long getId();
// 父級id
Long getParentId();
// 子級數組
void setChildren(List<? extends AbstractTreeNode> children);
}代碼示例
import cn.bunny.tree.AbstractTreeNode;
import lombok.Data;
import java.util.List;
@Data
public class ForumBoardVo implements AbstractTreeNode {
private Long id;
// 父級板塊ID
private Long parentId;
// 板塊名
private String boardName;
// 封面
private String cover;
// 描述
private String boardDesc;
// 排序
private Integer sort;
// 0:只允許管理員發(fā)帖 1:任何人可以發(fā)帖
private Boolean postType;
private List<ForumBoardVo> children;
@Override
public void setChildren(List<? extends AbstractTreeNode> children) {
this.children = (List<ForumBoardVo>) children;
}
}構建樹型結構
import java.util.ArrayList;
import java.util.List;
public class TreeBuilder<T extends AbstractTreeNode> {
/**
* 構建屬性結構
*
* @param nodeList 需要構建的數組
* @return 樹型結構
*/
public List<T> buildTree(List<T> nodeList) {
List<T> tree = new ArrayList<>();
for (T node : nodeList) {
if (node.getParentId() == 0) {
node.setChildren(getChildren(node.getId(), nodeList));
tree.add(node);
}
}
return tree;
}
/**
* 遞歸設置子級菜單
*
* @param nodeId 節(jié)點id
* @param nodeList 節(jié)點列表
* @return 子級菜單
*/
private List<T> getChildren(Long nodeId, List<T> nodeList) {
List<T> children = new ArrayList<>();
for (T node : nodeList) {
if (node.getParentId().equals(nodeId)) {
node.setChildren(getChildren(node.getId(), nodeList));
children.add(node);
}
}
return children;
}
}先向正常的返回數組使用,畢竟我們是要返回VO對象,如果是直接返回數據庫中對象也可,下面只做一個示例。
public List<ForumBoardVo> loadBoard() {
// 數據庫中l(wèi)ist
List<ForumBoard> forumBoardListDB = list();
// 構建返回對象數組
List<ForumBoardVo> forumBoardVoList = new ArrayList<>();
// 樹型結構返回數組
TreeBuilder<ForumBoardVo> treeBuilder = new TreeBuilder<>();
// 對數據庫中數組進行排序,這個可有可無
forumBoardListDB.sort(Comparator.comparing(ForumBoard::getSort));
// 將數據庫中數組一個一個塞到 List<ForumBoardVo> 的數組中
forumBoardListDB.forEach(forumBoard -> {
ForumBoardVo forumBoardVo = new ForumBoardVo();
BeanUtils.copyProperties(forumBoard, forumBoardVo);
forumBoardVoList.add(forumBoardVo);
});
// 最后將調用樹形結構對象,構建樹型結構。
return treeBuilder.buildTree(forumBoardVoList);
}到此這篇關于Java通用三級菜單工具類的文章就介紹到這了,更多相關Java三級菜單內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例
這篇文章主要介紹了Spring Cloud Alibaba 使用 Feign+Sentinel 完成熔斷的示例,幫助大家更好的理解和學習使用Spring Cloud,感興趣的朋友可以了解下2021-03-03
Spring Boot Actuator執(zhí)行器運行原理詳解
這篇文章主要介紹了Spring Boot Actuator執(zhí)行器運行原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2020-03-03
Java泛型之協(xié)變與逆變及extends與super選擇
這篇文章主要介紹了Java泛型之協(xié)變與逆變及extends與super選擇,文章圍繞主題內容展開詳細內容介紹,需要的小伙伴可以參考一下2022-05-05
Java實戰(zhàn)項目練習之球館在線預約系統(tǒng)的實現(xiàn)
理論是遠遠不夠的,只有在實戰(zhàn)中才能獲得能力的提升,本篇文章手把手帶你用java+SpringBoot+maven+freemark+Mysql實現(xiàn)一個球館在線預約系統(tǒng),大家可以在過程中查缺補漏,提升水平2022-01-01

