首页 技术 正文
技术 2022年11月14日
0 收藏 901 点赞 2,569 浏览 911 个字

BiFunction函数式接口:

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

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

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

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

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

首先是根据条件过滤:

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

那Predicate长啥样?

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

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

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

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

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

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

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

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

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

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

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

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

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

所以优化一下为:

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

接着调用一下:

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

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

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

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

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

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

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

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

Predicate函数式接口:

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

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

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

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

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

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

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

相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,088
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,564
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,413
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,186
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,822
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,905