首先要看你的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()));
来源:oschina
链接:https://my.oschina.net/u/4115727/blog/4715065