java8学习之BiFunction函数式接口实例演示&Predicate函数式接口详解

BiFunction函数式接口:

在上次中已经对BiFunction接口进行了初步的认识,这里对它进一步学习,这里打算新建一个Person实体,然后新建若干个Person的实例存放在集合中,最后再根据若干条件来从集合中挑选满足指定条件的元素,下面开始:

然后新建几个Person对象存放在集合元素中:

接下来从集合中查找满足指定条件的元素,当然这里不采用传统的方式去做,而是采用函数式风格的方式来实现,这里采用Stream的方式进行过滤,关于Stream之后会系统的进一步学习的,这里先有个感知既可:

首先是根据条件过滤:

那Predicate长啥样?

很明显可以用作生成条件,不过这个接口在下面会专门学习的,这里先用一下它:

过滤完之后,接下来则需要生成一个集合,这里采用如下方式既可:

 

可见用函数式的方式代码的可读性也比传统的方式要好,下面调用一下它:

接下来咱们根据年龄进行相应的条件查询,先定义一个方法:

在正式实现时,思考一下:明显是两个输入参数,最终返回结果是一个,这不是明显符合咱们上次学习的BiFunction的特性么?所以这次采用BiFunction来实现:

从上面的条件来看是从集合中找出大于指定年龄的元素,不过对于有段代码可以简化一下,IDE也已经识别出来为灰色了:

所以优化一下为:

接着调用一下:

接下来再进一步,这次将BiFunction作为方法的行为由调用者来提供,如下:

从这个方法定义来看完全不知道具体行为,也就是不知道如何来根据年龄进行元素过滤,是大于,是小于,完全不知,这时是由调用者来去指定的,如下:

此时就变得非常灵活了,如果此时的过滤条件发生变化了:由之前的大于指定年龄变为小于指定年龄了,这时我们的过滤方法是不用变化的,只需要在调用时更改过滤条件既可,如下:

再一次体现了函数式传递行为的魅力~~

Predicate函数式接口:

在上面的例子中已经涉及到了Predicate函数式接口了,接下来仔细再来学习一下它,先来读一下它的javaDoc:

所以说从这个函数的形态来看,最适合就是定义那些条件相关的东东了,下面简单使用一下它:

这个接口在未来Steam中会大量使用到,其中在上面对集合元素进行过滤中就已经使用到了。

posted on 2018-01-06 16:32  cexo  阅读(1668)  评论(0编辑  收藏  举报

导航