遍历 java 中的列表列表

Iterating through lists of list in java

我有两个 tables UserRoles 具有如下一对一关系。

User
_________________________________________
| Id  | user_name | full_name | creator |
_________________________________________
| 1   | a         | A         | a       |
| 2   | b         | B         | a       |
| 3   | c         | C         | a       |
| 4   | d         | D         | c       |
| 5   | e         | E         | c       |
| 6   | f         | F         | e       |
| 7   | g         | G         | e       |
| 8   | h         | H         | e       |
| 9   | i         | I         | e       |
|10   | j         | J         | i       |
_________________________________________

Roles
_______________________________________
| id | user_mgmt | others | user_id |
_______________________________________
| 1  | 1        | 1      | 1           |
| 2  | 0        | 1      | 2           |
| 3  | 1        | 0      | 3           |
| 4  | 0        | 1      | 4           |
| 5  | 1        | 1      | 5           |
| 6  | 0        | 1      | 6           |
| 7  | 0        | 0      | 7           |
| 8  | 0        | 0      | 8           |
| 9  | 1        | 0      | 9           |
________________________________________

Roles table 有 boolean 列,所以如果 Useruser_mgmt 角色,他可以添加很多用户(多少用户可以是用户添加的不确定)。我想获取一个用户及其子用户创建的所有用户(a 是父级,c 是 a 的子级,e 是 c 的子级......)。

这是我获取用户的代码

public void loadUsers(){
  List<Users> users = new ArrayList<>();

  String creator = user.getUserName();
  List<Users> createdUsers = userService.getUsersByCreator(creator);
  for(Users user : createdUsers) {
    Roles role = createdUsers.getRoles();
    if(role.isEmpMgnt()){
      users.add(user);
      loadUsers();
    }
  }
}

这给了我一个堆栈溢出错误。如果我不递归调用 loadUsers() 它 returns 只有一个子结果。那么有什么解决办法吗?提前感谢您的帮助。

这会给你堆栈溢出错误,因为 a 有创建者 a。所以你有用户 a 的无限循环。对于 a,您应该将创建者设置为 null 或跳过代码中的自我引用。 您还应该将当前用户传递给 loadUsers() 方法并只读取由它创建的用户。喜欢

public void loadUsers(String creator)

并且只处理由该创建者创建的用户。这里

String creator = user.getUserName();

什么是用户?你应该使用创建者。问题是如何获得初始创建者。可能初始创建者应该是创建者为空的用户。