`

遍历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中循环遍历删除List和Set集合中元素的方法(推荐)

    在上述代码中,使用增强型for循环(foreach)遍历Set集合。当尝试在循环内部删除元素时,Java的迭代机制无法处理这种行为,因此抛出`ConcurrentModificationException`。 **正确的遍历删除方式** 为了避免上述异常...

    list遍历的五种方法

    在 Java 编程中,遍历 List 集合是一项常见的任务,特别是在处理数据或执行迭代操作时。这里,我们详细探讨了五种遍历 List 集合的方法,并结合 List 接口概述来理解其核心特性。 1. **普通 for 循环遍历** 这是最...

    Iterator遍历过程中list删除导致异常

    在Java编程中,`Iterator`是用于遍历集合(如`List`, `Set`等)的重要工具。然而,当我们尝试在使用`Iterator`遍历集合的过程中直接修改集合时,可能会遇到`ConcurrentModificationException`异常。这个异常通常发生...

    集合概述set、List、Map

    迭代器(Iterator)接口用于遍历集合中的元素,它是集合框架的一部分,提供了一种方式来访问集合元素,而不暴露底层的数据结构。 - `hasNext()`:判断集合中是否有下一个元素。 - `next()`:返回集合中的下一个元素。...

    javaList用法

    List 集合是 Java 中的一种常用的集合类型,提供了许多实用的方法,例如 add、remove、set、get 等。这些方法可以对 List 集合进行各种操作,如添加元素、删除元素、修改元素等。 List 集合的类型 List 集合有多种...

    Java集合排序及java集合类详解(Collection、List、Map、Set)讲解.pdf

    Java集合排序及java集合类详解(Collection、List、Map、Set)讲解 Java集合框架是Java语言中最重要的组件之一,能够正确使用Java集合框架对于Java程序的开发具有无比的好处。本文将详细解释Java集合框架的实现原理、...

    Set用法及与List的区别

    在Java编程语言中,集合框架是处理对象的主要工具,其中包括List、Set和Queue等接口。本文将重点关注Set的用法及其与List的区别。 首先,让我们理解Set的基本概念。Set是一个不允许有重复元素的集合,它遵循唯一性...

    Java集合Collection、List、Set、Map使用详解.pdf

    集合框架提供了多种数据结构,例如Collection、List、Set、Map等,每种数据结构都有其特点和使用场景。 集合框架的分类 Java集合框架可以分为两大类:Collection和Map。Collection接口是Java集合框架的根接口,...

    List,set,Map 的用法和区别

    Java 集合框架中 List、Set、Map 的用法和区别 Java 集合框架(Java Collections Framework)是 Java 语言中的一个重要组件,提供了一些基本的数据结构和算法来操作和存储数据。其中,List、Set、Map 是三个非常...

    Java集合Collection、List、Set、Map使用详解

    Set中的元素不能通过索引访问,而是通过迭代器遍历。 ##### 1.5.2 常用方法 Set接口的方法与Collection接口相同,但由于它不允许重复元素,因此没有专门的方法来处理重复性。 ##### 1.5.3 实现原理 - **HashSet*...

    19_集合_第2天(List、Set)_讲义

    在Java编程语言中,集合框架提供了多种数据结构,如List和Set,它们是日常开发中常用的工具。本讲义主要关注这两个核心概念,旨在帮助学习者深入理解和应用。 首先,我们来探讨List接口。List是有序的集合,允许...

    Java集合排序及java集合类详解(Collection、List、Map、Set)

    随着应用程序复杂度的增加,简单地使用基本数据类型或自定义对象已经不能满足需求,这时候就需要引入更为复杂的容器结构来有效地组织和处理大量的数据。Java集合框架提供了多种类型的容器来满足不同的数据管理需求。...

    字典的遍历键值对入门学习

    需要注意的是,在遍历过程中修改字典可能会引发异常,因此在实际应用时要格外小心。为了避免这种情况,通常会在遍历之前先创建字典的一个副本或者在遍历结束后再进行删除等操作。 #### 六、总结 通过以上内容的...

    List Set Map以及子类的比较 .docx

    List 集合的特有方法有:add(index, value) 在 index 位置添加值,remove(index) 移除 index 位置的值,set(index, value) 将 index 位置的值替换为 value,get(index) 获取指定索引处的值。 Set 集合的特点是散列...

    Java集合:Collection、List、Set、Map使用详解

    Java集合框架是Java编程语言的核心组成部分,它提供了一种存储和...在实际编程中,应根据需求选择合适的数据结构,如需要保持元素顺序可以选择List,需要避免重复元素可以选择Set,而需要存储键值对应关系时则选择Map。

    Java-Java集合体系-List-Set

    在Java中,集合主要分为三大接口:List、Set和Map。这些接口各有特点,适用于不同的应用场景。 一、List接口 List接口是单列集合的子接口,它允许存储重复的元素,并且元素具有顺序性。List接口提供了丰富的操作...

    数据结构-集合(Set)介绍和Java示例代码

    数据结构中的集合(Set)是一种基础且重要的概念,尤其在编程语言如Java中。集合类在Java中提供了多种实现,包括HashSet、TreeSet等,它们都遵循集合的基本特性:唯一性、无序性和可变大小。 唯一性是集合的核心...

    Java List集合方法及遍历过程代码解析

    Java List集合方法及遍历过程代码解析 Java List集合是 Java 编程语言中的一种常用的数据结构,可以存储多个元素,并提供了多种操作元素的方法。List 集合是带索引的集合,每个元素都有其对应的索引值,可以通过...

    Java集合排序及java集合类详解(Collection、List、Map、Set).doc

    Java集合排序及java集合类详解(Collection、List、Map、Set) Java 中的集合框架是 Java 语言中最重要和最常用的部分之一。它能够帮助开发者更方便地处理和存储数据,从而提高编程效率和程序的可读性。本文将详细...

Global site tag (gtag.js) - Google Analytics