学习任务:

视频学习

动手测试filter()

filter()方法对元素进行过虑,不满足条件的元素扔掉,满足条件的元素保留,方法如下:

Stream<T> filter(Predicate<? super T> predicate);

测试代码如下:

//filter()测试,过虑价格大于50的课程
public static void test_filter() {
    //创建collection集合
    List<PbCourse> list = new ArrayList<>() ;
    list.add(new PbCourse(100L, "攀博课堂-Java面向对象教程", 33));
    list.add(new PbCourse(101L, "攀博课堂-Spring全家桶教程", 44));
    list.add(new PbCourse(102L, "攀博课堂-SpringCloud微服务教程", 55));
    list.add(new PbCourse(103L, "攀博课堂-在线教育分布式项目教程", 66));
    list.add(new PbCourse(104L, "攀博课堂-电子商务项目教程", 66));
    //调用filter取出价格大于50的课程
    Stream<PbCourse> stream = list.stream().filter(x->x.getPrice()>50);
    //遍历
    stream.forEach(System.out::println);
}

输出:

PbCourse [id=102, courseName=攀博课堂-SpringCloud微服务教程, price=55]
PbCourse [id=103, courseName=攀博课堂-在线教育分布式项目教程, price=66]
PbCourse [id=104, courseName=攀博课堂-电子商务项目教程, price=66]

通过输出结果可以看出,价格大于50元的课程打印到了控制台。

数据经过filter()方法后进行遍历输出,代码如下:

//调用filter取出价格大于50的课程
Stream<PbCourse> stream = list.stream().filter(x->x.getPrice()>50);
//遍历
stream.forEach(System.out::println);

上边的代码可以简写如下:

list.stream().filter(x->x.getPrice()>50).forEach(System.out::println);

如果有多个filter条件如何编写?比如要过虑出价格大于50的“Spring”相关课程呢?

可以直接在filter中添加条件,也可以用两个filter实现:

方法1:

list.stream().filter(x->x.getPrice()>50 && x.getCourseName().indexOf("Spring")>=0).forEach(System.out::println);

方法2:

 list.stream().filter(x->x.getPrice()>50).filter(x->x.getCourseName().indexOf("Spring")>=0).forEach(System.out::println);

通过forEach处不是简单的输出元素,会对过虑出来的元素进行处理,如下所示:

	    List<PbCourse> newList = new ArrayList<>();
        //对过虑出来的元素进行详细处理
        list.stream().filter(x->x.getPrice()>50).filter(x->x.getCourseName().indexOf("Spring")>=0).forEach(item->{
            //对过虑出来的元素进行详细处理
//            System.out.println(item);
            //将过虑出的元素存入一个新的集合
            newList.add(item);
        });
        newList.forEach(System.out::println);
提问-攀博课堂
我要提问 不会就问,有效沟通
关注公众号,加入微信群交流提问。 攀博课堂官方公众号
问答列表,查看本知识点所有问题