JAVA8新特性之StreamAPI(三)

继之前了解了StreamAPI的创建以及中间操作后,今天主要说一下StreamAPI的最后一步,也就是终止操作。
终止操作主要有查找与匹配,以及归约与收集,这些操作很像我们平时的sql操作,也比较好理解。
首先看看查找与匹配,有这样几种操作:
allMatch-检查是否匹配所有元素

anyMatch-检查是否至少匹配一个元素

noneMatch-检查是否没有匹配所有元素

findFirst-返回第一个找到的元素

findAny-返回任意一个找到的元素

count-返回流中的元素个数

max-返回流中的最大值

min-返回流中的最小值

接下来我们逐一看看他们的用法:

首先是allMatch,比如我们有这样一个学生集合:

  List<Student> stus= Arrays.asList(
            new Student("张三",16,168.25, Student.Status.FREE),
            new Student("李四",48,178.25,Student.Status.VOCATION),
            new Student("王五",12,148.45,Student.Status.BUSY),
            new Student("赵六",18,180.68,Student.Status.FREE),
            new Student("田七",18,180.68,Student.Status.VOCATION)

    );

我们想知道该集合中的每个学生是不是状态都为BUSY,先看allMatch方法源码:
在这里插入图片描述
这是一个参数为断言型接口返回值为布尔值的方法,说明我们使用该方法会得到true或false两种结果:

接下来完成我们的功能:

		boolean b1 = stus.stream().allMatch((e)->e.getStatus().equals(Student.Status.BUSY));
        System.out.println(b1);

很明显,结果会是false

类似的,anyMatch方法也是这样使用,但因为它是用于检查是否有一个学生状态为BUSY,所以运行结果会是true

 boolean b2=stus.stream().anyMatch(e->e.getStatus().equals(Student.Status.BUSY));
        System.out.println(b2);

接下来是noneMatch方法,检查是否全部状态不为BUSY,结果为false

boolean b3=stus.stream().noneMatch(e->e.getStatus().equals(Student.Status.BUSY));
        System.out.println(b3);

接下来是两个比较特殊的方法findFirst和findAny,由于两者使用类似,我们放在一起,我们以findFirst为例,先查看该方法的源码:
在这里插入图片描述
这是一个无参数但返回值为Optional对象的方法,Optional对象是JAVA8的又一新特性,它用于帮助我们解决泛型中的对象是否为空,避免空指针异常的出现,这里我们往后再提,既然需要这样一个类型,那么我们就用这样一个类型进行接收,假设我们需要找到集合中身高最高的学生,我们可以先按照身高进行排序,再使用findFirst方法取到第一个学生,即为身高最高的学生:

Optional<Student> optional=stus.stream().sorted((e1, e2)->-Double.compare(e1.getHeight(),e2.getHeight())).findFirst();
        System.out.println(optional.get());

注意在比较时带上-号,这样才是从大到小进行排序,得到满足条件的学生后,我们使用Optional类中的get方法取出该Student对象,并进行打印,结果如下:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值