//部分上线省份
List orgaList = orgaService.getSubOrgaListByCode(billCycle);
// 全部省分
List orgaListAll = orgaService.getSubOrgaListByCodeALL(jgCode);
//遍历得到未上线省份
for (Orga orga : orgaList) {
for (Orga orgaAll : orgaListAll) {
String codeALL = orgaAll.getCode();
String code = orga.getCode();
if (codeALL.equals(code)) {
orgaListAll.remove(orgaAll);
}
}
}
遍历的时候会出错。java.util.ConcurrentModificationException
Orga对象里面有一个code 和name字段
//遍历得到未上线省份
for (Orga orga : orgaList) {
for (int i = orgaListAll.saiz()-1;i--) {
Orga orgaAll = orgaListAll.get(i);
String codeALL = orgaAll.getCode();
String code = orga.getCode();
if (codeALL.equals(code)) {
orgaListAll.remove(orgaAll);
}
}
}
楼主就是相求个差集的嘛。jdk已经提供了比较好的实现啊。
List<String> list1 = new ArrayList<String>();
list1.add("1");
list1.add("2");
list1.add("3");
list1.add("4");
list1.add("5");
list1.add("6");
List<String> list2 = new ArrayList<String>();
list2.add("1");
list2.add("2");
list2.add("3");
List<String> result = new ArrayList<String>();
result.addAll(list1);
result.removeAll(list2);
System.out.println("差集:"+result);
至于你的异常的问题,如果在循环的过程中删除集合的元素,需要用迭代器iterator迭代并且调用iterator.remove()。否则报java.util.ConcurrentModificationException,再深入可看arraylist的源码,就知道为什么会这样了。
result.clear();
result.addAll(list1);
result.retainAll(list2);
System.out.println("交集:"+result);
result.clear();
result.addAll(list1);
result.addAll(list2);
System.out.println("并集:"+result);
有判断条件的话就去覆写一下Orga 类的equals方法。如果这样做会影响其他地方的话,那就新建一个result集合,在循环的过程中往result里添加元素,最后得到未上线的集合也没问题啊。
楼上说的很清楚了,简而言之,for循环删除list中的元素的时候,list的排序是会变化的,这时候就会报如上错误
http://www.cnblogs.com/andy-zhou/p/5339683.html
两个集合嵌套循环时候,调用删除的话的时候,需要判断删除集合的位数,容易造成越界,可以做个控制或者新建一个集合,将需要的数据放到新建的集合中
在循环遍历集合的过程中不能删除集合的元素
按照你的思路调整下代码就可以了(如下),当然还有更好的方法来过滤掉重复的数据。
//部分上线省份
List orgaList = orgaService.getSubOrgaListByCode(billCycle);
// 全部省分
List orgaListAll = orgaService.getSubOrgaListByCodeALL(jgCode);
List removeList = new ArrayList();
//遍历得到未上线省份
for (Orga orga : orgaList) {
for (Orga orgaAll : orgaListAll) {
String codeALL = orgaAll.getCode();
String code = orga.getCode();
if (codeALL.equals(code)) {
removeList.add(orgaAll);
//orgaListAll.remove(orgaAll);
}
}
}
orgaListAll.removeAll(removeList);