以前我们对list中数据进行删除操作时基本都是使用迭代器,这种方式实现起来比较复杂,要写好几行代码才能做到,而且像我这种记性还经常忘记具体怎么写,还要百度, 最近发现一种非常简单的方式。就是Collection中的removeIf()方法。他是在jdk1.8后加入的。看下它的源码。
default boolean removeIf(Predicate<? super E> filter) {
Objects.requireNonNull(filter);
boolean removed = false;
final Iterator<E> each = iterator();
while (each.hasNext()) {
if (filter.test(each.next())) {
each.remove();
removed = true;
}
}
return removed;
}
内部也是使用迭代器实现的,还进行判空处理,很严谨的。
下面我们举个栗子,看他具体怎么使用。
public static void main(String[] args) {
List<String> listOf = new ArrayList<>();
listOf.add("xiaoming");
listOf.add("xiaohong");
listOf.add("dazhou");
listOf.removeIf(a -> a.indexOf("xiao") < 0);
listOf.forEach( s -> System.out.println(s));
}
这个例子是删除list中每个元素不包含“xiao”的元素, 然后打印出删除后的元素。
结果正是我们需要的。
使用这个方法,只需要一行代码就完成 了我们的需求,非常简单。