2016-12-05 4 views
2
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); 
     } 
    } 
} 

出力を削除する方法:recuresively

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] 

問題:

私は、ユーザーが持っているユーザリストを持って、ユーザリストでユーザが他のユーザリストを持つことができますが、私はユーザリストで利用可能な後続のユーザーを削除したいです。私は再帰的にユーザーオブジェクトを削除しようとしている、子オブジェクトオブジェクトは、同じ再帰呼び出しで親を削除する方法、正常に削除されます。

答えて

1

より多くのOOp方法は、削除を行うことです。

class User { 
    ... 
    public void deleteUserRecursively() { 
     if (userList != null) { 
      for (User user : userList) { 
       user.deleteUserRecursively(); 
      } 
     } 
    } 
} 
+0

ありがとうOldCurmudgeon、この再帰は私の期待通りに働いています。 – ravi

0

ユーザクラスにfiled "parent"を追加してみます。次のように:

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; 
    }