【发布时间】:2021-07-04 06:01:54
【问题描述】:
class Employee{
private String employeeId;
private boolean isLeaf;
private List<Employee> children;
}
empl
emp2
emp2a
emp2b
emp2b1
emp3
emp3a
..
..
..
使用上述层次结构,我想为每个员工创建孩子。
预期输出:获取每个父母的孩子
Map<String,Set<String>>
{"empl1",["emp2","emp2a","emp2b","emp2b1","emp3","emp3a"]}
{"empl2",["emp2a","emp2b","emp2b1"]}
{"empl2b",["emp2b1"]}
{"emp3",["emp3a"]}
这可以使用现有的 Employee 类结构吗?
试过这个,但不起作用,不知道如何/在哪里停止循环 非常感谢任何帮助。谢谢!
public void visitAllNodes(Employee emp){
Map<String,Set> childMap = new HashMap<>();
Map<String,Set> finalResult =
visitChildNodesTest(childMap,emp.getEmployeeId(),emp.getEmployees());
}
private Map<String, List> visitChildNodesTest(Map<String, List>
parentChildMap, String parentEmpId,
List<Employee> employees) {
if (CollectionUtils.isNotEmpty(employees)) {
employees.forEach(employee -> {
if (employee.getEmployees() != null) {
getAndPut(parentChildMap,employee.getEmployeeId(),parentEmpId);
visitChildNodesTest(parentChildMap, employee.getEmployeeId(),
employee.getEmployees());
}
});
}
return parentChildMap;
}
private void getAndPut(Map<String, List> parentChildMap, String
employeeId, String parentEmpId) {
if (parentChildMap.get(parentEmpId) == null) {
List<String> ls = new ArrayList<>();
ls.add(parentEmpId);
ls.add(employeeId);
parentChildMap.put(parentEmpId, ls);
} else {
List ls = parentChildMap.get(parentEmpId);
ls.add(employeeId);
parentChildMap.put(parentEmpId, ls);
}
}
【问题讨论】:
-
是的,这是可能的。到目前为止,您尝试过什么?
-
你这里有问题。您的目标数据结构仅允许 2 级深度。据我所知,emp2b1 是一个孙子,被压扁为直系子孙。那是你真正需要的吗?
-
还有@jena84 你真的是指孩子吗?或者他们是由员工管理还是工作为员工或朋友的??
-
它看起来像一棵树,为什么不是?