1. 向上递归查找顶级父类
private User recursion(User user, Map<String, User> map) {
if (user.getParentId() == null) {
return user;
}
User parent = map.get(user.getParentId());
return recursion(parent, map);
}
private void recursion(User user, Map<String, User> map) {
if (user.getParentId() == null) {
System.out.println("user = " + user);
return;
}
User parent = map.get(user.getParentId());
recursion(parent, map);
}
2. 向上递归查找所有值
private void recursionUp(List<User> allUsers, User thisUser, List<User> returnUsers) {
if (thisUser == null) {
return;
}
returnUsers.add(thisUser);
String parentId = thisUser.getParentId();
if (StringUtils.isBlank(parentId)) {
return;
}
User parent = null;
for (User user : allUsers) {
if (parentId.equals(user.getId())) {
parent = user;
break;
}
}
recursionUp(allUsers, parent, returnUsers);
}
3. 向下递归查找所有值
private void recursionDown(List<User> allUsers, User thisUser, List<User> returnUsers) {
if (thisUser == null) {
return;
}
User son = null;
for (User user : allUsers) {
String parentId = user.getParentId();
if (thisUser.getId().equals(parentId)) {
returnUsers.add(user);
son = user;
break;
}
}
recursionDown(allUsers, son, returnUsers);
}
4. 使用案例: 根据当前值查找其上下文内容
public static void main(String[] args) {
List<User> allUsers = new LinkedList<>();
User thisUser = new User();
List<User> returnUsers = new LinkedList<>();
recursionUp(allUsers, thisUser, returnUsers);
recursionDown(allUsers, thisUser, returnUsers);
System.out.println("returnUsers = " + returnUsers);
}