BiFunction函数式接口:

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

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

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

首先是根据条件过滤:

那Predicate长啥样?

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

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

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

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

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

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

所以优化一下为:

接着调用一下:

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

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

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

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

Predicate函数式接口:

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

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

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

最新文章

  1. Linux的一些常用快捷键和基本命令
  2. Java虚拟机JVM学习02 类的加载概述
  3. LintCode Singleton
  4. Java文件读取
  5. IOS 友盟使用详解
  6. 【Todo】【读书笔记】Java多线程编程指南-设计模式篇
  7. css3 渐变记
  8. javascript——基本包装类型
  9. "No appenders found for logger" and "Please configure log4j properly"
  10. POJ 2393 Yogurt factory 贪心
  11. 对于JavaScript中this关键字的理解
  12. Android项目实战(三十六):给背景加上阴影效果
  13. Linux shell爬虫实现树洞网自动回复Robot
  14. vue+element-ui实现显示隐藏密码
  15. 《HelloGitHub月刊》第 04 期(秋招临近,本期加入了面试相关的项目)
  16. 斗地主 ai的一些资料
  17. hdu 5510 Bazinga (KMP+暴力标记)
  18. mysql distinct 去重
  19. 网站精准查询IP
  20. Java基础教程:注解

热门文章

  1. Etherscan
  2. LeetCode.1184-公交车站之间的距离(Distance Between Bus Stops)
  3. MySQL学习-MySQL内置功能_事务操作
  4. 零零散散的python笔记 2
  5. 安装部署FastDFS
  6. Ubuntu16.04下使用pycharm导入scrapy框架
  7. Java实现二叉树地遍历、求深度和叶子结点的个数
  8. Atomic long 和long的区别
  9. Educational Codeforces Round 68 (Rated for Div. 2)补题
  10. Jmeter之TCP取样器(模拟数据上报压测)