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

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

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

那Predicate长啥样?

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

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

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

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

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

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

所以优化一下为:

接着调用一下:

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

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

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

再一次体现了函数式传递行为的魅力~~
Predicate函数式接口:
在上面的例子中已经涉及到了Predicate函数式接口了,接下来仔细再来学习一下它,先来读一下它的javaDoc:



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

这个接口在未来Steam中会大量使用到,其中在上面对集合元素进行过滤中就已经使用到了。
java8学习之BiFunction函数式接口实例演示&Predicate函数式接口详解的更多相关文章
- 解决C#程序只允许运行一个实例的几种方法详解
解决C#程序只允许运行一个实例的几种方法详解 本篇文章是对C#中程序只允许运行一个实例的几种方法进行了详细的分析介绍,需要的朋友参考下 本文和大家讲一下如何使用C#来创建系统中只能有该程序的一个实例运 ...
- Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解
Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解 说明:Java生鲜电商平台-APP/小程序接口传输常见的加密算法及详解,加密算法,是现在每个软件项目里必须用到的内容. 广泛应用在包括 ...
- Python操作redis学习系列之(集合)set,redis set详解 (六)
# -*- coding: utf-8 -*- import redis r = redis.Redis(host=") 1. Sadd 命令将一个或多个成员元素加入到集合中,已经存在于集合 ...
- TortoiseGit学习系列之TortoiseGit基本操作拉取项目(图文详解)
前面博客 TortoiseGit学习系列之TortoiseGit基本操作克隆项目(图文详解) TortoiseGit学习系列之TortoiseGit基本操作修改提交项目(图文详解) TortoiseG ...
- Git学习系列之Git基本操作拉取项目(图文详解)
前面博客 Git学习系列之Git基本操作推送项目(图文详解) 当然,如果多人协作,或者多个客户端进行修改,那么我们还要拉取(Pull ... )别人推送到在线仓库的内容下来. 大神们是不推荐使用 pu ...
- C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解
系列目录 [已更新最新开发文章,点击查看详细] 在我的博客<C#二次开发BIMFACE系列61 File Management文件管理服务接口二次开发及实战详解>最后列出了 Fil ...
- [二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口
函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type use ...
- 微信支付现金红包接口应用实例代码说明和DEMO详解,适合用来做微信红包营销活动、吸粉利器
本文详细介绍微信红包开发的接口,商户调用接口时,通过指定发送对象以及发送金额的方式发放红包,领取到红包后,用户的资金直接进入微信零钱.后面带有具体调用php实例 总结一下:需要注意的是PEM秘 ...
- 人工智能之深度学习-初始环境搭建(安装Anaconda3和TensorFlow2步骤详解)
前言: 本篇文章主要讲解的是在学习人工智能之深度学习时所学到的知识和需要的环境配置(安装Anaconda3和TensorFlow2步骤详解),以及个人的心得体会,汇集成本篇文章,作为自己深度学习的总结 ...
随机推荐
- AssetBundle资源打包与加载
AssetBundle资源打包 1.AssetLabels资源标签 文件名:资源打包成AssetBundle后的文件名,类似于压缩包的名字 后缀:自定义 文件名和后缀名都是小写格式(大写会自动转为小 ...
- ASP.NET Core 入门笔记10,ASP.NET Core 中间件(Middleware)入门
一.前言 1.本教程主要内容 ASP.NET Core 中间件介绍 通过自定义 ASP.NET Core 中间件实现请求验签 2.本教程环境信息 软件/环境 说明 操作系统 Windows 10 SD ...
- ERNIE学习笔记
https://ai.baidu.com/forum/topic/show/954092 学习ERNIE的输入部分 输入 一共有五个部分组成,每个部分之间用分号;隔开: · token_ids:输入句 ...
- ubuntu 16.04主题美化
目录 numix图标 Flatabulous主题 参考: Unity-tweak-tool插件 numix图标 sudo apt-add-repository ppa:numix/ppa sudo a ...
- Linux就该这么学——新手必须掌握的命令之系统状态检测命令组
ifconfig命令 用途 : 获取网卡配置与网络状态等信息 格式 : ifconfig[网络设备][参数] 其实主要查看的就是网卡名称,inet参数后面的IP地址,ether参数后面的网卡物理地址( ...
- luogu P2423 [HEOI2012]朋友圈 (最大团)
在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着. 一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最大数目.两个国家看成是 ...
- SSM(Spring+SpringMVC+MyBatis)高并发优化思路
SSM(Spring+SpringMVC+MyBatis)框架集由Spring.MyBatis两个开源框架整合而成(SpringMVC是Spring中的部分内容).常作为数据源较简单的web项目的框架 ...
- 对接外网post,get接口封装类库
public class HttpHelper { public static string GetAsync(string url) { HttpWebRequest request = WebR ...
- 【weixin】微信支付简介
一.微信支付模式 1.付款码支付 付款码支付是用户展示微信钱包内的“刷卡条码/二维码”给商户系统扫描后直接完成支付的模式.主要应用线下面对面收银的场景. 2.Native支付 Native支付是商户系 ...
- 动画方案 Lottie 学习(一)之基础
参考 lottie系列文章(一):lottie介绍 lottie系列文章(二):lottie最佳实践 lottie系列文章(三):动画设计规范 lottie系列文章(四):源码分析——svg渲染