`

遍历Set集合remove掉不需要的数据,List不能在遍历的时候remove

    博客分类:
  • java
阅读更多
for(Iterator<IAddress> it=addSet.iterator();it.hasNext();){
	IAddress address = it.next();
	if(address.getId() != null){
		Boolean flag = false;
		for(IAddress addr : set){
			if(addr.getId().equals(address.getId())){
				flag = true;
				break;
			}
		}
		if(!flag){
			it.remove();
		}
	}
}

 List遍历的时候不能直接 remove,实现办法是用 iterator.remove,否则会报ConcurrentModificationException 

 

 

注意set 在remove操作时set集合不能再有任何修改,否则hashcode发生改变,则不能remove成功

例如以下case

Hibernate.initialize(subAccount.getAuthorizors());


			if(subAccount.getAuthorizors() != null){
				
				Iterator<IAuthorizor> iterator = subAccount.getAuthorizors().iterator();
				
				while(iterator.hasNext()){
					
					IAuthorizor authorizor = iterator.next();
					
					if(authorizor != null){
					
						Hibernate.initialize(authorizor.getAuthorizorIDs());
						
						Hibernate.initialize(authorizor.getAuthorizorAddresses());

						Hibernate.initialize(authorizor.getAuthorizorPhones());

						Hibernate.initialize(authorizor.getNationality());
						
					}
					
				}
				
			}

authorizor 重新initialize之后,remove 不会成功,所以,可以将db取到的set copy 给一个新的set。再remove

Set<IAuthorizor> tempAuthSet = subAccount.getAuthorizors();//db data
Set<IAuthorizor> dbAuthSet = (Set<IAuthorizor>)ObjectUtil.deepCopy(tempAuthSet);
			//Delete authorizor
			for(Iterator<IAuthorizor> it = dbAuthSet.iterator();it.hasNext();){
				IAuthorizor dbAuthorizor = it.next();
			   if(dbAuthorizor.getId() != null){
					Boolean flag = false;
					for(IAuthorizor authorizor : authSet){
						if(authorizor.getId() != null){
							if(authorizor.getId().equals(dbAuthorizor.getId())){
								flag = true;
								break;
							}
						}
					}
					if(!flag){
						//it.remove();
						dbAuthSet.remove(dbAuthorizor);
					}
				}
			}
			
			dbAuthSet.addAll(addAuthSet);
			subAccount.setAuthorizors(dbAuthSet);

 

分享到:
评论

相关推荐

    Java集合框架Collection接口.pdf

    而Set是一个不重复的集合,元素是无序的。 Collection接口的常用方法 1、add(Object obj):向集合中添加一个元素obj; 2、addAll(Collection c):将集合c中的所有元素添加到该集合中; 3、remove(Object obj):从...

    java遍历特例

    //list遍历 for(String m: list){ System.out.println(m); } // hashmap entrySet() 遍历 for(Map.Entry&lt;Object,Object&gt; m: hash.entrySet()){ System.out.println(m.getKey()+"---...

    求2个集合的交集

    另外求并集时,由于哈希表的值(VALUE)部分不需要用到,所以这个数据结构也可以更换为 哈希集(HashSet)。 转载请注明出处。 VB中HashTable 2012-08-20 14:43:21| 分类: asp.net|举报|字号 订阅 首先定义一个...

    jdk1.8.0_202.zip

    stream 对集合进行处理,并不会改变集合,类似于数据库的select 创建stream 集合.stream() 操作stream filter 过滤 map 转换 skip 跳过 distinct 去重 limit 取几条 结果处理 foreach 输出 ...

    Collection学习笔记——每天一个Java小技巧

    Collection学习笔记Collection集合概述Collection集合常用方法Collection集合的遍历(迭代器)集合的使用样例 Collection集合概述 是单例集合的顶层接口 它提供了更具体的子接口的实现,如set和list. Collection集合...

    数据结构与算法分析_Java语言描述(第2版)

    4.5.1 一个简单的想法(不能直接使用) 4.5.2 展开 4.6 树的遍历 4.7 B树 4.8 标准库中的集合与映射 4.8.1 关于Set接口 4.8.2 关于Map接口 4.8.3 TreeSet类和TreeMap类的实现 4.8.4 使用多个映射的例 小结 练习 参考...

    数据结构与算法分析_Java语言描述(第2版)]

    表达式树4.3 查找树ADT——二叉查找树4.3.1 contains方法4.3.2 findMin方法和findMax方法4.3.3 insert方法4.3.4 remove方法4.3.5 平均情况分析4.4 AVL树4.4.1 单旋转4.4.2 双旋转4.5 伸展树4.5.1 一个简单的想法...

    数据结构与算法分析Java语言描述(第二版)

    表达式树4.3 查找树ADT——二叉查找树4.3.1 contains方法4.3.2 findMin方法和findMax方法4.3.3 insert方法4.3.4 remove方法4.3.5 平均情况分析4.4 AVL树4.4.1 单旋转4.4.2 双旋转4.5 伸展树4.5.1 一个简单的想法...

    数据结构与算法分析 Java语言描述第2版

    表达式树4.3 查找树ADT——二叉查找树4.3.1 contains方法4.3.2 findMin方法和findMax方法4.3.3 insert方法4.3.4 remove方法4.3.5 平均情况分析4.4 AVL树4.4.1 单旋转4.4.2 双旋转4.5 伸展树4.5.1 一个简单的想法...

    cpp-算法精粹

    AlgoHub囊括了 POJ, ZOJ, leetcode, HackerRank 等网站的经典题目(一些质量不高的题目则忽略),且 AlgoHub有非常简单的加题系统,用户不需要写一行代码即可自己添加题目,所以AlgoHub的题库还在飞速增长中。...

    超级有影响力霸气的Java面试题大全文档

     Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 13、&和&&的区别。 &是位运算符...

    java 面试题 总结

     Collection是集合类的上级接口,继承与他的接口主要有Set 和List. Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。 10、&和&&的区别。 &是位运算符...

    数据结构与算法分析-Java语言描述(第2版)_2_2

    4.5.1 一个简单的想法(不能直接使用) 4.5.2 展开 4.6 树的遍历 4.7 b树 4.8 标准库中的集合与映射 4.8.1 关于set接口 4.8.2 关于map接口 4.8.3 treeset类和treemap类的实现 4.8.4 使用多个映射...

    数据结构与算法分析-Java语言描述(第2版)_1_2

    4.5.1 一个简单的想法(不能直接使用) 4.5.2 展开 4.6 树的遍历 4.7 b树 4.8 标准库中的集合与映射 4.8.1 关于set接口 4.8.2 关于map接口 4.8.3 treeset类和treemap类的实现 4.8.4 使用多个映射...

    LeetCode判断字符串是否循环-Leetcode-Java-:Leetcode-Java-

    LeetCode判断字符串是否循环 ...用Set遍历nums1,根据Set的方法性质,重复数组元素会被去除,用List储存nums2中与nums1相同的元素,如果set中remove掉了对应元素,则res中addnums2数组元素,再新建数组储存对应

    二十三种设计模式【PDF版】

    会 Java 的人越来越多,但是一直徘徊在语言层次的程序员不在少数,真正掌握 Java 中接口或抽象类的应用不是很多,大家 经常以那些技术只适合大型项目为由,避开或忽略它们,实际中,Java 的接口或抽象类是真正体现 ...

    unix分析关于UNIX的一些浅析

    总线上包括设备和驱动的集合,总线上所有设备组成双向循环链表,包含在platform_device的设备集合中,总线上所有驱动组成双向循环链表,包含在platform_dirver的驱动集合中。 platform_driver_register(struct ...

    C++MFC教程

    4、窗口句柄:说到消息就不能不说窗口句柄,系统通过窗口句柄来在整个系统中唯一标识一个窗口,发送一个消息时必须指定一个窗口句柄表明该消息由那个窗口接收。而每个窗口都会有自己的窗口过程,所以用户的输入就会...

    ZendFramework中文文档

    10.7.3. 遍历结果集 10.8. Zend_Db_Table Relationships 10.8.1. Introduction 10.8.2. Defining Relationships 10.8.3. Fetching a Dependent Rowset 10.8.4. Fetching a Parent Row 10.8.5. Fetching a ...

Global site tag (gtag.js) - Google Analytics