Java for循环删除集合中某些元素

Java for循环有四种方法删除集中某些元素:
1、简单for循环删除(这种方法不报错,但是结果不正确

for(int i=0;i<list.size();i++){
	if(list.get(i).contains("aaa")){
		list.remove(i);
	}
}

结果不正确原因是:list中被删除一个元素以后,list中元素的索引会改变

2、增强for循环 forEarch()(这种方法会报错 Concurrent Modification Exception)

list.forEarch(item->{
	if(item.contains("aaa")){
		list.remove(item);
	}
})

foreach不支持对集合中的元素进行增删操作,但是支持修改

3、通过迭代器(Iterator)删除(推荐使用该方法

Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
	String str = iterator.next();
	if(str.contains("aaa")){
		iterator.remove();
	}
}

注意:使用iterator迭代器的时候不可以对集合做维护和新增操作,如果要添加和更改元素,建议使用ListIterator

4、Java 8提供的一个方法removeIf()(推荐使用该方法)

list.removeIf(item->item.contains("aaa));

最后:Arrays.asList()方法生成的列表是无法直接删除里面的元素的,需要在外面套一层
new Arraylist()

String[] strs = {"a","ab","abc"};
List<String> list = new ArrayList<>(Arrays.asList(strs));

或者先转换成流再收集成list

String[] strs = {"a","ab","abc"};
 List<String> list1 = Arrays.asList(strs).stream().collect(Collectors.toList());
 List<String> list2 = Arrays.strem(strs).collect(Collectors.toList());

你可能感兴趣的:(Java后端,开发过程中遇到的问题,list,java)