java8学习之BiFunction函数式接口实例演示&Predicate函数式接口详解
2018-01-06 16:32
681 查看
[b]BiFunction函数式接口:[/b]
在上次中已经对BiFunction接口进行了初步的认识,这里对它进一步学习,这里打算新建一个Person实体,然后新建若干个Person的实例存放在集合中,最后再根据若干条件来从集合中挑选满足指定条件的元素,下面开始:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/d08628dbf617fdc7b7cc996e6cc04c41.png)
然后新建几个Person对象存放在集合元素中:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/5c640d54304eab32b7e3704b5dee6a49.png)
接下来从集合中查找满足指定条件的元素,当然这里不采用传统的方式去做,而是采用函数式风格的方式来实现,这里采用Stream的方式进行过滤,关于Stream之后会系统的进一步学习的,这里先有个感知既可:
首先是根据条件过滤:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/ade672ebe7bae02843aa3151185ef50a.png)
那Predicate长啥样?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/6c95fca2471da4630c743adf8828c5ed.png)
很明显可以用作生成条件,不过这个接口在下面会专门学习的,这里先用一下它:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/1c019ab39b8891e8a6c8f1f96ac1d9f0.png)
过滤完之后,接下来则需要生成一个集合,这里采用如下方式既可:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/11eda1039aa6e2519fd325b2242ba5fb.png)
可见用函数式的方式代码的可读性也比传统的方式要好,下面调用一下它:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/54e3c6d0ecbb290a9fd73a54d8741a1c.png)
接下来咱们根据年龄进行相应的条件查询,先定义一个方法:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/9666e1f6d4f1c5abdfb4fd39f198c88c.png)
在正式实现时,思考一下:明显是两个输入参数,最终返回结果是一个,这不是明显符合咱们上次学习的BiFunction的特性么?所以这次采用BiFunction来实现:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/571d9e66a1e3d63ae8397d8e2e569aa1.png)
从上面的条件来看是从集合中找出大于指定年龄的元素,不过对于有段代码可以简化一下,IDE也已经识别出来为灰色了:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/a0c02735f18e6220b43fe2e8c8036075.png)
所以优化一下为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/f161f709dfe68424bb1afd552737df08.png)
接着调用一下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/9f170e3a3b749250aca268199e8ea7b5.png)
接下来再进一步,这次将BiFunction作为方法的行为由调用者来提供,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/52bca6f2467c6f201b37c39483ad8601.png)
从这个方法定义来看完全不知道具体行为,也就是不知道如何来根据年龄进行元素过滤,是大于,是小于,完全不知,这时是由调用者来去指定的,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/f1cce37b933425d0881c52aa787bbfc6.png)
此时就变得非常灵活了,如果此时的过滤条件发生变化了:由之前的大于指定年龄变为小于指定年龄了,这时我们的过滤方法是不用变化的,只需要在调用时更改过滤条件既可,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/95a7eeb20e1ea2ac46da3283b52aac19.png)
再一次体现了函数式传递行为的魅力~~
[b]Predicate函数式接口:[/b]
在上面的例子中已经涉及到了Predicate函数式接口了,接下来仔细再来学习一下它,先来读一下它的javaDoc:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/8ddc3ee3da4a3304adf5079557952ce3.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/45c42d985de0ca32527501ebc50895a0.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/cecc41f51d2b72b45ebe3385909112d5.png)
所以说从这个函数的形态来看,最适合就是定义那些条件相关的东东了,下面简单使用一下它:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/d714895fa8e175e34b8d072a59297c90.png)
这个接口在未来Steam中会大量使用到,其中在上面对集合元素进行过滤中就已经使用到了。
在上次中已经对BiFunction接口进行了初步的认识,这里对它进一步学习,这里打算新建一个Person实体,然后新建若干个Person的实例存放在集合中,最后再根据若干条件来从集合中挑选满足指定条件的元素,下面开始:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/d08628dbf617fdc7b7cc996e6cc04c41.png)
然后新建几个Person对象存放在集合元素中:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/5c640d54304eab32b7e3704b5dee6a49.png)
接下来从集合中查找满足指定条件的元素,当然这里不采用传统的方式去做,而是采用函数式风格的方式来实现,这里采用Stream的方式进行过滤,关于Stream之后会系统的进一步学习的,这里先有个感知既可:
首先是根据条件过滤:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/ade672ebe7bae02843aa3151185ef50a.png)
那Predicate长啥样?
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/6c95fca2471da4630c743adf8828c5ed.png)
很明显可以用作生成条件,不过这个接口在下面会专门学习的,这里先用一下它:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/1c019ab39b8891e8a6c8f1f96ac1d9f0.png)
过滤完之后,接下来则需要生成一个集合,这里采用如下方式既可:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/11eda1039aa6e2519fd325b2242ba5fb.png)
可见用函数式的方式代码的可读性也比传统的方式要好,下面调用一下它:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/54e3c6d0ecbb290a9fd73a54d8741a1c.png)
接下来咱们根据年龄进行相应的条件查询,先定义一个方法:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/9666e1f6d4f1c5abdfb4fd39f198c88c.png)
在正式实现时,思考一下:明显是两个输入参数,最终返回结果是一个,这不是明显符合咱们上次学习的BiFunction的特性么?所以这次采用BiFunction来实现:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/571d9e66a1e3d63ae8397d8e2e569aa1.png)
从上面的条件来看是从集合中找出大于指定年龄的元素,不过对于有段代码可以简化一下,IDE也已经识别出来为灰色了:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/a0c02735f18e6220b43fe2e8c8036075.png)
所以优化一下为:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/f161f709dfe68424bb1afd552737df08.png)
接着调用一下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/9f170e3a3b749250aca268199e8ea7b5.png)
接下来再进一步,这次将BiFunction作为方法的行为由调用者来提供,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/52bca6f2467c6f201b37c39483ad8601.png)
从这个方法定义来看完全不知道具体行为,也就是不知道如何来根据年龄进行元素过滤,是大于,是小于,完全不知,这时是由调用者来去指定的,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/f1cce37b933425d0881c52aa787bbfc6.png)
此时就变得非常灵活了,如果此时的过滤条件发生变化了:由之前的大于指定年龄变为小于指定年龄了,这时我们的过滤方法是不用变化的,只需要在调用时更改过滤条件既可,如下:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/95a7eeb20e1ea2ac46da3283b52aac19.png)
再一次体现了函数式传递行为的魅力~~
[b]Predicate函数式接口:[/b]
在上面的例子中已经涉及到了Predicate函数式接口了,接下来仔细再来学习一下它,先来读一下它的javaDoc:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/8ddc3ee3da4a3304adf5079557952ce3.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/45c42d985de0ca32527501ebc50895a0.png)
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/cecc41f51d2b72b45ebe3385909112d5.png)
所以说从这个函数的形态来看,最适合就是定义那些条件相关的东东了,下面简单使用一下它:
![](https://oscdn.geek-share.com/Uploads/Images/Content/201801/06/d714895fa8e175e34b8d072a59297c90.png)
这个接口在未来Steam中会大量使用到,其中在上面对集合元素进行过滤中就已经使用到了。
相关文章推荐
- java8学习之Function与BiFunction函数式接口详解
- java8学习之Lambda表达式继续探讨&Function接口详解
- 实例详解Java8函数式接口
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- Java菜鸟学习笔记--数组篇(二):数组实例&args实例
- java学习 返回接口匿名实例 暑假第七天
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- Java移位运算符详解实例——左移位运算符>>、带符号的右移位运算符>>
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- Java8学习笔记(1) -- 从函数式接口说起
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- java学习,关于接口理解,实例分析
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Hibernate_配置详解>(三十六)
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- java学习 返回接口匿名实例 暑假第七天
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)
- Java菜鸟学习笔记--数组篇(二):数组实例&args实例
- Java的位运算符详解实例——与(&)、非(~)、或(|)、异或(^)