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