gpt4 book ai didi

Java - 从 csv 文件创建嵌套 TreeView

转载 作者:太空宇宙 更新时间:2023-11-04 09:50:33 25 4
gpt4 key购买 nike

我搜索过类似的问题,但找不到明确的解决方案,所以希望有人能提供帮助。我对 Java 相当陌生,并尝试执行以下操作,但遇到了一点困难。问题:我有一个包含三个字段的 CSV 文件:String、int、String这是一个组织列表,显示我部门的 140 人及其经理,我想创建一个显示整个组织的嵌套树结构。

CSV 字段为:员工、numberOfDirectReports、经理例如示例可能是:

Bob, 5, Dave

Dave, 2, Alice

Sam, 0, Bob

所以这告诉我爱丽丝位于树的顶部,戴夫向她报告。戴夫本人有两名直接下属,其中之一是鲍勃。 Bob 有 5 名直接下属,Sam 就是其中之一。 Sam 没有直接下属。

爱丽丝

- Dave
- DavesOtherReport

- Bob

- Sam

- BobsOtherReport

- BobsOtherReport

- BobsOtherReport

- BobsOtherReport

到目前为止我所做的是创建一个名为 Employee 的类,其中包含三个变量 String employeeID、int numDirectReports、String manager我创建了一个名为employeeList 的ArrayList,其中包含140 个Employee 实例。

我可以打印出员工及其经理的名单。但我想做的是迭代列表/数组(抱歉,如果我稍微混合了我的术语)并为整个群体生成类似上面的树结构的东西。

有什么想法吗?我需要为此创建另一个中间数据结构吗?如果是这样,我如何初始化然后填充它?或者我可以仅使用我已经填充的employeeList 来打印我想要的树类型吗?

最佳答案

所以如果我理解正确的话,你会有这样的类(class):

public class Employee {
private String employeeID;
private String manager;
int numDirectReports;
private List<Employee> employeeList;

...
}

一些评论:

  • 为什么不声明manager作为Employee ?使用起来不是更简单吗?
  • 字段numDirectReports是多余的:它的值应该等于 employeeList.size() .
  • 同一员工不得在 employeeList 中出现两次一些经理的。

所以我宁愿声明一个类如下:

public class Employee {
private String employeeID;
private Employee manager;
private final Set<Employee> employeeSet = new HashSet<>();

public String getEmployeeID() {
return employeeID;
}

public void setEmployeeID(String employeeID) {
this.employeeID = employeeID;
}

public Employee getManager() {
return manager;
}

public void setManager(Employee manager) {
this.manager = manager;
}

public Set<Employee> getEmployeeSet() {
return new HashSet<>(employeeSet);
}

public void addEmployee(Employee e) {
employeeSet.add(e);
}
}

现在,要在构建树的同时加载 CSV,我将使用 Map<String,Employee> :

    Map<String,Employee> allEmployees = new HashMap<>();
for (String[] record: csvRecords()) {
String id = record[0];
int redundant = Integer.parseInt(record[1]);
String managerId = record[2];
Employee emp = allEmployees.get(id);
if (emp == null) {
emp = new Employee();
emp.setEmployeeID(id);
allEmployees.put(id, emp);
}
Employee manager = null;
if (managerId != null && managerId.length() > 0) {
manager = allEmployees.get(managerId);
if (manager == null) {
manager = new Employee();
manager.setEmployeeID(managerId);
allEmployees.put(managerId, manager);
}
manager.addEmployee(emp);
}
emp.setManager(manager);
}

更新

如果您需要直接报告的数量,您可以添加一个方法:

public int numberOfDirectReports() {
return employeeSet.size();
}

关于Java - 从 csv 文件创建嵌套 TreeView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54806947/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com