Java8新增的removeIf(Predicate filter)方法:该方法将会批量删除符合filter条件的所有元素,该方法需要一个Predicate对象作为参数,Predicate也是函数式接口,因此可以使用Lambda表达式。
例:
public class PredicateTest {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("张三");
list.add("李四");
list.add("王二");
list.add("李麻子");
list.add("李三");
list.removeIf(obj->obj.contains("李"));
for (String s : list) {
System.out.println(s);
}
}
}
运行结果
ArrayList中的源码
predicate接口的作用不仅仅在此,可以为自己想要的某些东西进行过滤:如下
public class PredicatTest2 {
public static void main(String[] args) {
ArrayList<String> list = new ArrayList<>();
list.add("水煮鱼");
list.add("酸菜鱼");
list.add("麻辣鱼");
list.add("麻婆豆腐");
list.add("回锅肉");
list.add("鱼香肉丝");
list.add("水煮肉片");
list.add("宫保鸡丁");
list.add("剁椒鱼头");
list.add("夫妻肺片");
//统计list中名字只有三个字符的菜品
int count1 = getCount(list, obj -> ((String) obj).length() == 3);
System.out.println("菜名只有三个字的菜品有" + count1 + "个");
//统计list中关于鱼的菜品有几个
int count2 = getCount(list, obj -> ((String) obj).contains("鱼"));
System.out.println("list中关于鱼的菜品有" + count2 + "个");
}
public static int getCount(Collection collection, Predicate predicate) {
int count = 0;
for (Object o : collection) {
if (predicate.test(o)) {
count++;
}
}
return count;
}
}