首先要看你的List是怎麼生成的,比如:
List<String> strList = Arrays.asList("a", "b", "aa", "ab", "ba");
這種方式生成的List是不能改變的(fixed size),具體可以參見源碼。
比如下面這種方式生成的List是可以改變的:
List<String> strList2 = new ArrayList<>();
strList2.add("a");
strList2.add("ab");
strList2.add("ac");
strList2.add("ad");
以下測試都採用這個List.
package com.cc.test;
import cn.hutool.core.lang.Console;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
public class TestDemo {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
Iterator<String> iterator = list.iterator();
while(iterator.hasNext()){
String next = iterator.next();
if(next.equalsIgnoreCase("a")){
iterator.remove();
}
}
for (String key : list) {
System.out.println(key);
}
}
}
接下來看看從Java 8 開始的刪除:
1. removeIf方法
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.removeIf(s ->s.equals("a"));
list.forEach(System.out::println);
2.retainAll方法
List<String> asList = Arrays.asList("a", "c", "b", "e", "g");
ArrayList<String> list = new ArrayList<>();
list.add("a");
list.add("b");
list.add("c");
list.add("d");
list.add("e");
list.retainAll(asList); //使用retain來求交集,從而也可以實現去重的效果
System.out.println(list);
3. filter方法
strList2 = strList2.stream().filter( s -> !s.equals("a")).collect(Collectors.toList());將指定條件的元素過濾,再生成新的集合
ArrayList<String> list = new ArrayList<>(); list.add("a"); list.add("b"); list.add("c"); list.add("d"); list.add("e"); list = list.stream().filter(s -> !s.equals("a").collect(Collectors.toList()));