全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

java8学习教程之函数引用的使用方法

前言

我们在上一篇文章 中以实例讲解如何定义和使用 lambda 表达式,以及与其它语言相比,lambda 表达式在 Java 中的特殊规范。并且提到,lambda 表达式可以进一步简化为函数引用。

这篇文章将介绍如何使用函数引用,话不多说了,来一起看看详细的介绍吧。

函数引用的类型

函数引用分为以下四种:

  • 静态函数,比如 Integer 类的 parseInt 函数,可以写作 Integer::parseInt
  • 对象级别函数的引用,比如 String 类的 length 函数,可以写作 String::length
  • 具体实例的函数的引用,比如名称为 expensiveTransaction 的一个实例的 getValue,写作 expensiveTransaction::getValue
  • 构造函数的引用

静态函数

比如:

Function<String, Integer> stringToInteger = (String s) -> Integer.parseInt(s);

可以写作:

Function<String, Integer> stringToInteger = Integer::parseInt;

对象级别函数的引用

BiPredicate<List<String>, String> contains =
(list, element) -> list.contains(element);

可以写作:

BiPredicate<List<String>, String> contains = List::contains;

构造函数的引用

下面再举一个构造函数的例子, 首先定义一个函数式接口,唯一的方法 get 返回指定类型的对象。

@FunctionalInterface
public interface Supplier<T> {
 T get();
}
Supplier<TantanitReader> constructor = () -> new TantanitReader();
TantanitReader tantanitReader = constructor.get();

上述代码的 lambda 表达式 new 并返回一个新的对象,使得 constructor 变量成为一个构造器的引用。

等价于以下函数引用:

Supplier<TantanitReader> constructor2 = TantanitReader::new;
TantanitReader tantanitReader2 = constructor2.get();

以上的例子都是没有参数的情况,下面仍然以构造函数为例,介绍有参数的情况:

public TantanitReader(String loginName) {
 this.loginName = loginName;
}
Function<String,TantanitReader> constructor3 = (loginName) -> new TantanitReader(loginName);
TantanitReader tantanitReader3 = constructor3.apply("jack");

Function<String,TantanitReader> constructor4 = TantanitReader::new;
TantanitReader tantanitReader4 = constructor4.apply("jack");
TantanitReader tantanitReader5 = constructor4.apply("tom");

这时由于函数只有一个参数,可以使用 Java 自带的 Function这个函数式接口,它实际起作用的函数如下:

R apply(T t);

作用为根据一个参数,返回一个结果。我们由此可以使用 constructor4 以及相应的函数引用 constructor5。

小结

使用函数引用不仅可以简化 lambda 表达式,而且在语义上可以更加专注于方法名称,也就是要做的事,抽象级别更加接近人类的认知。所以,应当尽可能使用函数引用。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对的支持。


# java8  # 函数引用  # java  # 函数  # 引用参数  # 如何更好的使用Java8中方法引用详解  # Java8中如何通过方法引用获取属性名详解  # 30分钟入门Java8之方法引用学习  # Java8 Lamda方法引用和构造引用原理  # Java8新特性:Lambda表达式之方法引用详解  # 使用java8的方法引用替换硬编码的示例代码  # Java8中方法引用的使用详解  # Java8方法引用和构造引用代码实例  # Java8方法引用及构造方法引用原理实例解析  # Java8新特性之方法引用的实践指南  # 可以使用  # 这篇文章  # 都是  # 说了  # 不多  # 要做  # 只有一个  # 为例  # 成为一个  # 自带  # 四种  # 谢谢大家  # 在上  # 如何使用  # 一篇文章  # 中以  # 分为以下  # 一个函数  # 专注于  # 有疑问 


相关文章: 如何在IIS服务器上快速部署高效网站?  建站之星如何防范黑客攻击与数据泄露?  猪八戒网站制作视频,开发一个猪八戒网站,大约需要多少?或者自己请程序员,需要什么程序员,多少程序员能完成?  表情包在线制作网站免费,表情包怎么弄?  高端企业智能建站程序:SEO优化与响应式模板定制开发  建站之星展会模版如何一键下载生成?  定制建站模板如何实现SEO优化与智能系统配置?18字教程  如何快速生成专业多端适配建站电话?  娃派WAP自助建站:免费模板+移动优化,快速打造专业网站  常州自助建站费用包含哪些项目?  如何构建满足综合性能需求的优质建站方案?  如何快速搭建高效WAP手机网站?  h5在线制作网站电脑版下载,h5网页制作软件?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  威客平台建站流程解析:高效搭建教程与设计优化方案  如何用腾讯建站主机快速创建免费网站?  高端网站建设与定制开发一站式解决方案 中企动力  c++23 std::expected怎么用 c++优雅处理函数错误返回【详解】  如何挑选最适合建站的高性能VPS主机?  如何在Windows 2008云服务器安全搭建网站?  广德云建站网站建设方案与建站流程优化指南  建站之星免费模板:自助建站系统与智能响应式一键生成  网站制作中优化长尾关键字挖掘的技巧,建一个视频网站需要多少钱?  如何用PHP快速搭建高效网站?分步指南  如何在IIS中新建站点并配置端口与IP地址?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  建站主机是什么?如何选择适合的建站主机?  完全自定义免费建站平台:主题模板在线生成一站式服务  建站之星安装步骤有哪些常见问题?  如何通过主机屋免费建站教程十分钟搭建网站?  广州建站公司哪家好?十大优质服务商推荐  盐城做公司网站,江苏电子版退休证办理流程?  建站之星如何助力网站排名飙升?揭秘高效技巧  如何快速建站并高效导出源代码?  如何快速搭建虚拟主机网站?新手必看指南  如何高效生成建站之星成品网站源码?  如何选择建站程序?包含哪些必备功能与类型?  厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?  ,sp开头的版面叫什么?  如何在新浪SAE免费搭建个人博客?  网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?  如何规划企业建站流程的关键步骤?  如何快速搭建高效可靠的建站解决方案?  广平建站公司哪家专业可靠?如何选择?  香港服务器租用每月最低只需15元?  如何在建站之星网店版论坛获取技术支持?  陕西网站制作公司有哪些,陕西凌云电器有限公司官网?  再谈Python中的字符串与字符编码(推荐)  python的本地网站制作,如何创建本地站点?  建站之星如何快速更换网站模板? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。