filter是Java8Stream方法:Streamfilter(Predicatepredicate)返回一个流,该流由与给定谓词匹配的该流的元素组成。removeIf是Java8Collection的默认方法。defaultbooleanremoveIf(Predicatefilter)移除此集合中满足给定谓词的所有元素。removeIf和filter方法都可以过滤/删除元素。从函数实现上来说,removeIf就是如果条件为真就过滤掉这个元素,如果条件为假就保留。而filter是如果条件为false就过滤掉这个元素,true则保留。时间上看场景,因为removeIf返回的是boolean,而filter是一个中间操作,需要终端操作才能最终处理流。如果只执行删除/过滤操作,removeIf会更快。示例:publicstaticvoidmain(String[]args){Listlist=newArrayList(Arrays.asList(1,2,3,4,5));longlast=System.currentTimeMillis();list.removeIf(a->a.equals(2));System.out.println(System.currentTimeMillis()-last);//37~38}publicstaticvoidmain(String[]args){Listlist=newArrayList(Arrays.asList(1,2,3,4,5));longlast=System.currentTimeMillis();list.stream().filter(a->!a.equals(2)).collect(Collectors.toList());System.out.println(System.currentTimeMillis()-last);//41~44}看源码实现:removeIf是Collection接口的默认方法(Java8新增),底层实现是获取一个迭代器,迭代每一个满足条件的元素,通过remove()方法移除,直到返回true,直到迭代完成,如果迭代后没有满足条件的元素,则返回false。如果涉及多个中间流,为了方便建议使用filter。defaultbooleanremoveIf(Predicatefilter){//判断是否为nullObjects.requireNonNull(filter);布尔值移除=false;finalIterator
