不对,如果把list都放进map,id作为key,org作为value,然后要怎么生成树
时间: 2024-12-27 15:32:20 浏览: 7
如果你将列表(通常是组织的子节点列表)作为Map中的值,并且使用ID作为键,你可以通过递归的方式来构建组织树。首先,你需要一个辅助方法来处理每个节点。以下是一个简单的Java示例:
```java
import java.util.*;
class Organization {
int id;
String name;
List<Organization> children;
Organization(int id, String name) {
this.id = id;
this.name = name;
this.children = new ArrayList<>();
}
}
public class OrganizationalTreeFromMap {
public static void main(String[] args) {
Map<Integer, Organization> orgMap = buildOrganizationMap();
printOrganizationTree(orgMap);
}
private static Map<Integer, Organization> buildOrganizationMap() {
Map<Integer, Organization> tree = new HashMap<>();
tree.put(1, new Organization(1, "总公司")); // 根节点
// 添加子节点
tree.get(1).addChild(new Organization(2, "部门A"), 2); // 子节点关联ID
tree.get(1).addChild(new Organization(3, "部门B"), 2);
// 添加孙节点
tree.get(2).addChild(new Organization(4, "子公司A"), 3);
tree.get(2).addChild(new Organization(5, "子公司B"), 3);
// ...继续添加更多的组织
return tree;
}
private static void addChild(Organization parent, Organization child, int parentId) {
if (parent != null && !parent.children.contains(child)) {
parent.children.add(child);
child.parent = parent; // 这里假设每个组织有parent属性指向上一级
} else {
System.err.println("Error: Child already exists or parent is null.");
}
}
private static void printOrganizationTree(Map<Integer, Organization> orgMap) {
printRecursive(orgMap.get(1), "");
}
private static void printRecursive(Organization org, String prefix) {
System.out.println(prefix + "[" + org.id + "]" + ": " + org.name);
for (Organization child : org.children) {
printRecursive(child, prefix + "\t");
}
}
}
```
这个示例中,`buildOrganizationMap()`函数创建了组织树结构,`addChild`方法负责将子节点添加到父节点的children列表并设置层级关系。`printOrganizationTree`和`printRecursive`函数用于打印整个组织树。
阅读全文