1、利用List的迭代器删除集合中的元素(推荐)
/**
*
* 利用List的迭代器删除集合中的元素(推荐)
* @author :xiarg
* @date : 2023/4/14 9:02
*/
@Test
public void iteratorDelListTest(){
List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
log.info("删除之前的List集合 -> {}",list);
Iterator<String> iterator = list.iterator();
while (iterator.hasNext()){
String item = iterator.next();
if(item.contains("m")){
iterator.remove();
}
}
log.info("删除之后的List集合 -> {}",list);
}
2、stream过滤掉不想要的数据,但是新生成了一个集合
/**
*
* stream过滤掉不想要的数据,但是新生成了一个集合
* @author :xiarg
* @date : 2023/4/14 9:20
*/
@Test
public void streamDelListTest(){
List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
log.info("删除之前的List集合 -> {}",list);
list = list.stream().filter( item -> !item.contains("m")).collect(Collectors.toList());
log.info("删除之后的List集合 -> {}",list);
}
3、采用集合的removeIf()方法(),实际上也是利用了1中的迭代器方法
/**
*
* 采用集合的removeIf()方法
* 实际上也是使用迭代器操作的
* @author :xiarg
* @date : 2023/4/14 9:23
*/
@Test
public void removeIfDelListTest(){
List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
log.info("删除之前的List集合 -> {}",list);
list.removeIf(item -> item.contains("m"));
log.info("删除之后的List集合 -> {}",list);
}
4、采用for循环删除指定元素
/**
*
* 采用for循环删除指定元素,先获取集合size。
* 删除一个元素i减少1,size减少1
* 减少的原因:由于当前元素被删除,后续元素下标会变成当前元素下标,如果i不减1,将跳过一个元素,
* size减少1是因为集合减少元素。for循环需要减少一次
* @author :xiarg
* @date : 2023/4/14 9:39
*/
@Test
public void forDelList(){
List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
log.info("删除之前的List集合 -> {}",list);
int size = list.size();
for (int i = 0; i < size; i++) {
String item = list.get(i);
if(item.contains("m")){
list.remove(item);
i--;
size--;
}
}
log.info("删除之后的List集合 -> {}",list);
}
5、采用for倒叙循环
/**
*
* 采用for倒叙循环,由于删除后面的元素,不影响前面的元素的下标
* @author :xiarg
* @date : 2023/4/14 9:39
*/
@Test
public void forBackDelList(){
List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
log.info("删除之前的List集合 -> {}",list);
int size = list.size();
for (int i = size -1 ; i >= 0; i--) {
String item = list.get(i);
if(item.contains("m")){
list.remove(item);
}
}
log.info("删除之后的List集合 -> {}",list);
}
6、新建一个集合,循环新建的集合的元素,操作删除老集合
/**
*
* 新建一个集合,循环新建的集合的元素,操作删除老集合(这个方法太笨了)
* @author :xiarg
* @date : 2023/4/14 9:39
*/
@Test
public void newListDelList(){
List<String> list = new ArrayList<>(Arrays.asList("lilei","hanmeimei","zhangsan","lisi"));
List<String> newList = new ArrayList<>(list);
log.info("删除之前的List集合 -> {}",list);
int size = newList.size();
for (int i = 0; i < size; i++) {
String item = newList.get(i);
if(item.contains("m")){
list.remove(i);
}
}
log.info("删除之后的List集合 -> {}",list);
}
笔者推荐使用第一个。