用java ,Lambda表达式获取一个菜单树表字段如下,id,name,ParentId ,delectableflag ("1", "menu1", "0", true), ("2", "menu2", "0", true), ("3", "menu3", "0", false), ("4", "menu4", "1", true), ("5", "menu5", "1", false), ("6", "menu6", "2", true), ("7", "menu7", "2", false), ("9", "menu7", "3", false), ("10", "menu7", "3", false)
时间: 2023-07-08 07:46:29 浏览: 97
您可以使用 Lambda 表达式将该菜单树表转化为一个树形结构,该树形结构的每个节点表示一个菜单,每个节点包括菜单的 id、name、delectableflag 和子菜单。可以按照以下步骤实现:
1. 定义一个菜单节点类,包含 id、name、delectableflag 和子菜单列表。
```
class MenuNode {
String id;
String name;
boolean delectableflag;
List<MenuNode> children;
public MenuNode(String id, String name, boolean delectableflag) {
this.id = id;
this.name = name;
this.delectableflag = delectableflag;
this.children = new ArrayList<>();
}
public void addChild(MenuNode child) {
children.add(child);
}
}
```
2. 将原始的菜单树表转化为一个菜单节点列表。
```
List<MenuNode> menuNodes = new ArrayList<>();
Map<String, MenuNode> idToMenuNode = new HashMap<>();
for (String[] row : rows) {
String id = row[0];
String name = row[1];
String parentId = row[2];
boolean delectableflag = Boolean.parseBoolean(row[3]);
MenuNode menuNode = new MenuNode(id, name, delectableflag);
idToMenuNode.put(id, menuNode);
if (parentId.equals("0")) {
menuNodes.add(menuNode);
} else {
MenuNode parentMenuNode = idToMenuNode.get(parentId);
parentMenuNode.addChild(menuNode);
}
}
```
3. 使用 Lambda 表达式遍历菜单节点列表,将每个节点转化为一个树形结构。
```
Function<MenuNode, Map<String, Object>> nodeToMap = node -> {
Map<String, Object> map = new HashMap<>();
map.put("id", node.id);
map.put("name", node.name);
map.put("delectableflag", node.delectableflag);
map.put("children", node.children.stream().map(nodeToMap).collect(Collectors.toList()));
return map;
};
List<Map<String, Object>> menuTree = menuNodes.stream().map(nodeToMap).collect(Collectors.toList());
```
现在,`menuTree` 就是一个树形结构,包含所有菜单节点的信息。每个节点都有一个 `children` 属性,表示它的子菜单。
阅读全文