在用Iterator去取集合元素的过程中(如Map、List),禁止使用集合本身的remove方法删除元素,用Iterator的remove()方法代替
否则会报异常java.util.ConcurrentModificationException。
java 代码
- List list = tree.getChildren();
- if (list != null) {
- Map map=new HashMap();
- Iterator iterator = list.iterator();
- RoleTreeNode childNode;
- RoleTreeNode leafNode;
- while (iterator.hasNext()) {
- childNode = (RoleTreeNode) iterator.next();
- if (!childNode.isNodeChecked())
- continue;
- List list1 = childNode.getChildren();
- if (list1 != null) {
- Iterator iterator1 = list1.iterator();
- while (iterator1.hasNext()) {
- leafNode = (RoleTreeNode) iterator1.next();
- if (leafNode.isNodeChecked()) {
- addBranchVersion(childNode.getIdentifier(),
- branchId, leafNode.getDescription());
- /*在用Iterator去取集合元素的过程中(如Map、List),禁止使用集合本身的remove方法删除元素,用Iterator的remove()方法代替
- * 否则会报异常java.util.ConcurrentModificationException*/
- if(childNode.getChildCount()!=1)
- {
- iterator1.remove();
- // childNode.getChildren().remove(leafNode);
- }
- else
- {
- iterator.remove();
- // tree.getChildren().remove(childNode);
- }
- List rightList=rightTree.getChildren();
- boolean flag=false;
- for(int i=0;i<rightTree.getChildCount();i++)
- {
- RoleTreeNode rightNode=(RoleTreeNode)rightList.get(i);
- String rightNodeDes=rightNode.getDescription();
- if(rightNodeDes.equals(childNode.getDescription()))
- {
- /*向左树添加rightNode的child(有且只有一个)*/
- childNode.getChildren().add(rightNode.getChildren().get(0));
- /*重构rightNode,复制左树与右树同description的左树的二级结点的选中的儿子到右树*/
- rightNode.getChildren().remove(0);
- rightNode.setDescription(childNode.getDescription());
- rightNode.setIdentifier(childNode.getIdentifier());
- rightModel.setNodeId(childNode.getIdentifier());
- leafNode.setNodeChecked(false);
- rightNode.getChildren().add(leafNode);
- flag=true;
- break;
- }
- }
- if(!flag)
- {
- RoleTreeNode newRightNode=new RoleTreeNode();
- newRightNode.setDescription(childNode.getDescription());
- newRightNode.setIdentifier(childNode.getIdentifier());
- newRightNode.setLeaf(false);
- newRightNode.setType(childNode.getType());
- newRightNode.setNodeChecked(false);
- leafNode.setNodeChecked(false);
- newRightNode.getChildren().add(leafNode);
- rightModel.setNodeId(childNode.getIdentifier());
- rightTree.getChildren().add(newRightNode);
- }
- break;
- }
- }
- }
- }
- map.put("leftTree",tree);
- map.put("rightTree",rightTree);
- return map;
- }