遍历 java 中的列表列表
Iterating through lists of list in java
我有两个 tables User
和 Roles
具有如下一对一关系。
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
列,所以如果 User
有 user_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();
什么是用户?你应该使用创建者。问题是如何获得初始创建者。可能初始创建者应该是创建者为空的用户。
我有两个 tables User
和 Roles
具有如下一对一关系。
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
列,所以如果 User
有 user_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();
什么是用户?你应该使用创建者。问题是如何获得初始创建者。可能初始创建者应该是创建者为空的用户。