Java8新增的removeIf(Predicate filter)方法、Predicate的用法

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;
    }
}