Java新增的Predicate操作集合

来源:互联网 发布:iphone7专业拍照软件 编辑:程序博客网 时间:2024/06/01 21:53

Java8为Collection集合新增了一个removelf(Predicate filter)方法,该方法将会批量删除符合filter条件的元素。该方法需要一个Predicate(谓词)对象作为参数,Predicate也是函数式接口,因此可以使用Lambda表达式。
如下程序示范了使用Predicate来过滤集合。

package base1;import java.util.*;import java.util.function.Predicate;public class test {    public static void main(String[] args){        Collection books = new HashSet();        books.add("轻量级java EE企业应用实践");        books.add("疯狂java讲义");        books.add("疯狂ios讲义");        books.add("疯狂Ajax讲义");        books.add("疯狂Android讲义");        books.removeIf(ele->((String)ele).length()<10);        System.out.println(books);    }

上面程序调用了Collection集合的removelf(Predicate filter)方法批量删除集合中符合条件的元素,程序传入了一个lambda表达式作为过滤条件:所有长度小于10的字符串元素都会被删除。编译运行代码,可以看到如下输出:

[轻量级java EE企业应用实践, 疯狂Android讲义]

如下程序示范Predicate简化集合的运算。

package base1;import java.util.*;import java.util.function.Predicate;public class test {    public static void main(String[] args){        Collection books = new HashSet();        books.add("轻量级java EE企业应用实践");        books.add("疯狂java讲义");        books.add("疯狂ios讲义");        books.add("疯狂Ajax讲义");        books.add("疯狂Android讲义");        System.out.println(calAll(books,ele->((String)ele).contains("疯狂")));        System.out.println(calAll(books,ele->((String)ele).contains("java")));        System.out.println(calAll(books,ele->((String)ele).length() > 10));    }    private static int calAll(Collection books, Predicate p) {        // TODO Auto-generated method stub        int total = 0;        for(Object obj : books){            if(p.test(obj)){                total++;            }        }        return total;    }}

运行结果:

422

该程序有如下三个统计需求:

  • 统计书名中出现”疯狂”字符串的图书数量;
  • 统计书名中出现”java”字符串的图书数量;
  • 统计书名长度大于10的图书数量。
原创粉丝点击