Reputation: 3881
class User{
String name;
List<User> userList;
public User(String name) {
super();
this.name = name;
}
public List<User> getUserList() {
return userList;
}
public void setUserList(List<User> userList) {
this.userList = userList;
}
@Override
public String toString() {
return "User [name=" + name + ", userList=" + userList + "]";
}
public void deleteUser(User user){
user=null;
}
}
public class TempTest {
public static void main(String[] args) {
User mainUser=new User("Main");
List<User> aUserList=new ArrayList<User>();
User e=new User("D");
aUserList.add(e);
List<User> mainUserList=new ArrayList<User>();
User a=new User("A");
a.setUserList(aUserList);
User b=new User("B");
User c=new User("C");
mainUserList.add(a);
mainUserList.add(b);
mainUserList.add(c);
mainUser.setUserList(mainUserList);
System.out.println(mainUser);
deleteUserRecursively(mainUser);
}
public static void deleteUserRecursively(User mainUser){
List<User> userList=mainUser.getUserList();
if(null!=userList){
for(User user:userList){
deleteUserRecursively(user);
}
}else{
mainUser.deleteUser(mainUser);
System.out.println("User Delete "+mainUser);
}
}
}
output:
User [name=Main, userList=[User [name=A, userList=[User [name=D, userList=null]]], User [name=B, userList=null], User [name=C, userList=null]]]
User Delete User [name=D, userList=null]
User Delete User [name=B, userList=null]
User Delete User [name=C, userList=null]
Problem:
I have user and has userList, user in the userList can have another userList, i want to delete subsequent users available in userlist. I am trying to delete user object recursively, child object objects are deleted successfully, how to delete parent in same recursion call.
Upvotes: 2
Views: 58
Reputation: 65811
The more OOp way would be to make the User
do the deletion.
class User {
...
public void deleteUserRecursively() {
if (userList != null) {
for (User user : userList) {
user.deleteUserRecursively();
}
}
}
}
Upvotes: 1
Reputation: 145
Try to add filed "parent" in user class. As follows:
class User{
String name;
String parent;
List<User> userList;
public User(String name) {
super();
this.name = name;
}
public User(String name,User user){
super();
this.name = name;
this.parent = user;
}
Upvotes: 0