2013-07-13 92 views
1

元件我有两个列表即,addList并在addList一个deleteList比较和删除清单

的元件是具有两个字段

AddEntity类型的
- id 
- parentId 

的AddEntity类是如下

public class AddEntity{ 
    int id; 
    int parentId; 

    //getters and setters here 
} 

deleteList中的实体类型为DeleteEntity它只有一个场

- deleteId 

的DeleteEntity类是如下

public class DeleteList{ 
    int deleteId; 
    //gettter and setter for deleteId goes here 
} 

现在我有两个列表 List<AddEntity> addListList<DeleteEntity> deleteList

对于EG。在addList内容

id   parentId 

2001   3 
2002   2001 
2003   2001 
2004   2002 
2005   2003 
2006   4 
2007   2006 

deleteList内容

deleteId 

2001 
3 
2007 

现在我想从addListid/parentId与元素的deleteListdeleteId比赛中删除的所有实体和他们的子女(递归)。 并且我还希望仅保留deleteList中与addList中的任何id不匹配的实体。

例如,在上述两个名单处理后这种情况下,addList的内容应该是

id  parentId 

2006 4 

deleteList现在将包含

deleteId 

3 

我有逻辑正确,但面临着一些问题在实现部分。我用JAVA来做。希望在这里找到一些解决方案。 谢谢!

EDIT

- (因为一些是心烦的问题)

我的方法

实际上逻辑是非常简单的。但有点混乱。

Step1: For each elements in the deleteList{ 
     For each elements in the addList{ 
      a) Match deleteId with id of each element in addList. 
      if(deleteId==id){ 
       mark current element from deleteList for deletion 
       loop: check if any other element in addList has parentId==id. 
         if YES mark it(addList element) for delete 
         take the id of the marked element and goto "loop" 

     } 
     }  
Step2: Delete All Marked Elements!! 

起初,我试图用foreach和删除的列表,而不是将它们标记为删除元素。这导致ConcurrentModificationException。然后我使用迭代器遍历列表。那就是我陷入困境的地方。

回答

1

检查了这一点。在这里我张贴我的整个代码,但我只测试了几个场景。欢迎所有评论。

AddList类

public class AddList { 
private int id; 
private int parentId; 

public int getId() { 
    return id; 
} 

public void setId(int id) { 
    this.id = id; 
} 

public int getParentId() { 
    return parentId; 
} 

public void setParentId(int parentId) { 
    this.parentId = parentId; 
} 
} 

DeleteList类

public class DeleteList { 
private int deleteId; 

public int getDeleteId() { 
    return deleteId; 
} 

public void setDeleteId(int deleteId) { 
    this.deleteId = deleteId; 
} 
} 

这里是主类

import java.text.ParseException; 
import java.util.ArrayList; 
import java.util.List; 

public class Main { 
public static void main(String[] args) throws ParseException { 
    List<AddList> addList = new ArrayList<AddList>(); 
    List<DeleteList> delList = new ArrayList<DeleteList>(); 
    AddList addL1 = new AddList(); 
    AddList addL2 = new AddList(); 
    AddList addL3 = new AddList(); 
    AddList addL4 = new AddList(); 
    AddList addL5 = new AddList(); 
    AddList addL6 = new AddList(); 
    AddList addL7 = new AddList(); 

    DeleteList delL1 = new DeleteList(); 
    DeleteList delL2 = new DeleteList(); 
    DeleteList delL3 = new DeleteList(); 

    addL1.setId(2001); 
    addL1.setParentId(3); 
    addL2.setId(2002); 
    addL2.setParentId(2001); 
    addL3.setId(2003); 
    addL3.setParentId(2001); 
    addL4.setId(2004); 
    addL4.setParentId(2002); 
    addL5.setId(2005); 
    addL5.setParentId(2003); 
    addL6.setId(2006); 
    addL6.setParentId(4); 
    addL7.setId(2007); 
    addL7.setParentId(2006); 

    delL1.setDeleteId(2001); 
    delL2.setDeleteId(3); 
    delL3.setDeleteId(2007); 

    addList.add(addL1); 
    addList.add(addL2); 
    addList.add(addL3); 
    addList.add(addL4); 
    addList.add(addL5); 
    addList.add(addL6); 
    addList.add(addL7); 

    delList.add(delL1); 
    delList.add(delL2); 
    delList.add(delL3); 

    removeElements(addList, delList); 
} 

public static void removeElements(List<AddList> add, List<DeleteList> del) { 
    boolean status = true; 
    int[] temp = new int[del.size()]; 
    int[] child = new int[add.size()]; 
    int i = 0; 
    while (status) { 
     for (int j = 0; j < add.size(); j++) { 
      if (del.get(i).getDeleteId() == add.get(j).getId()) { 
       add.remove(j); 
       temp[i] = del.get(i).getDeleteId(); 
       j = -1; 
      } 
     } 
     i++; 
     if (i == del.size()) { 
      status = false; 
     } 
    } 
    i = 0; 
    int k = 0; 
    boolean newStatus = true; 
    while (newStatus) { 
     for (int j = 0; j < add.size(); j++) { 
      if (temp[i] == add.get(j).getParentId()) { 
       child[k] = add.get(j).getId(); 
       add.remove(j); 
       k++; 
       j = -1; 
      } 
     } 
     i++; 
     if (i == del.size()) { 
      newStatus = false; 
     } 
    } 
    i = 0; 
    boolean con = true; 
    while (con) { 
     for (int j = 0; j < del.size(); j++) { 
      if (temp[i] == del.get(j).getDeleteId()) { 
       del.remove(j); 
       j = -1; 
      } 
     } 
     i++; 
     if (i == temp.length) { 
      con = false; 
     } 
    } 

    i = 0; 
    boolean cons = true; 
    while (cons) { 
     for (int j = 0; j < add.size(); j++) { 
      if (child[i] == add.get(j).getParentId()) { 
       add.remove(j); 
       j = -1; 
      } 
     } 
     i++; 
     if (i == child.length) { 
      cons = false; 
     } 
    } 
} 

}