平常开发中我们肯定会遇到删除List中的某些元素,这边推荐几个常用可靠的删除方法;
普通for 遍历删除(不可靠)
public static List<String> list = Arrays.asList("林一","林北","江君","张妮","杨斌","林可");
public static void remove() {
List<String> alist = new ArrayList<>(list);
for (int i = 0; i < alist.size(); i++) {
String str = alist.get(i);
if (str.startsWith("林")) {
alist.remove(str);
}
}
System.out.println(alist);
}
运行结果:
我们会发现元素并没有删除干净,林北为什么没有被删掉,通过debug我们会发现 list.size()在我们删除的过程中一直在动态变化,而i的值一直在累加,size()的值在减少,所以循环早早就结束了;这是不可靠的!
下面推荐几种常用可靠的方法
- 迭代器删除
public static void remove2() {
List<String> alist = new ArrayList<>(list);
for (Iterator<String> iterator= alist.iterator(); iterator.hasNext(); ) {
if (iterator.next().startsWith("林")) {
iterator.remove();
}
}
System.out.println(alist);
}
- stream流删除
public static void remove3() {
List<String> alist = new ArrayList<>(list);
alist = alist.stream().filter(d ->!d.startsWith("林")).collect(Collectors.toList());
System.out.println(alist);
}
- removeIf()
public static void remove4() {
List<String> alist = new ArrayList<>(list);
alist.removeIf(d->d.startsWith("林"));
System.out.println(alist);
}
执行结果: