首页 > 编程语言 >Java函数式编程(1):Lambda表达式(2)

Java函数式编程(1):Lambda表达式(2)

时间:2022-11-04 06:55:05浏览次数:44  
标签:Java 函数 编程 接口 匿名 表达式 Lambda

您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~

 

从之前的Lambda表达式的演变过程可以知道,Lambda表达式其实是一个对匿名内部类的简化过程:去掉了多余的语法修饰,只保留最最核心的部分。在Java中类似这种使用匿名内部类写代码的场景非常多,比如Runnable接口,就是典型的最好使用Lambda表达式的地方。例如这样的代码:

 

 

 

可以清除地看到代码的简化过程。

所以Lambda表达式的特点在于:

1、匿名:像匿名函数一样,没有名字,只有代码块

2、函数:基于接口函数执行,而不是类

3、行为:传递行为,而非封装代码

很多刚开始学习Lambda表达式的人之所以觉得比较难适应,是因为没有弄明白完整的匿名函数是如何进行简化的这个过程。我个人的学习经验是,只要脑子里时时记着:Lambda是对匿名函数的简化,就会容易理解一些了。

Java8除了将匿名内部类改造成了Lambda表达式之外,还提供了一个注解,叫做@FunctionalInterface。它专门用来自定义需要的函数式接口。例如:

 

 

 

它可以这么来用:

FruitInterface face = (t) -> System.out.println("这是自定义的函数式编程接口");

 

省略了实例化的类名、省略了方法名、省略了参数类型,只显示方法的参数和方法体。自然过渡到Lambda表达式的建议:

 

 

 

 

这是Java提供的注解。除了这个注解以外,为了方便码农开发,Java也预定义了一堆可以直接拿来就用的函数式接口,常用的都列到这个表里了:

 

 

 

什么是供给型呢?意思就是没有消费却能提供输出(消费指的是有没有参数)。例如之前说的Runnable就是一个供给型接口,可以简化成:

() -> System.out.println("这是run()方法里面的打印语句");

 

再比如预测型,可能是:

 

 

 

所以,先把Java预定义的函数式接口弄熟也是一个不错的开始。

之所以花这么多篇幅来说Lambda表达式和函数式接口,是因为这玩意确实是比较难理解。不管对于刚入门的新手,还是有了一些开发经验的老手,都是如此。所以,新人不必觉得为啥自己学不会。不止是新人,很多有多年开发经验的人都容易卡在这里,这也是我为啥宁可多花点篇幅反复啰嗦的原因。

 

至于方法引用和构造器引用,并不是什么高大上的技术,只要把Lambda表达式和函数式编程的底层原理搞懂了,那玩意分分钟学会。

 

 


 

 

感谢您的大驾光临!咨询技术、产品、运营和管理相关问题,请关注后留言。欢迎骚扰,不胜荣幸~

 

标签:Java,函数,编程,接口,匿名,表达式,Lambda
From: https://www.cnblogs.com/xiangwang1111/p/16855927.html

相关文章

  • javascript Swap two nodes调换两个元素的位置
    SwaptwonodesThefunctionbelowswapstwogivennodes,nodeAandnodeB:constswap=function(nodeA,nodeB){constparentA=nodeA.parentNode;c......
  • java分页查询后端代码
    packagecom.example.demo;importjava.util.List;importorg.apache.ibatis.annotations.Delete;importorg.apache.ibatis.annotations.Insert;importorg.apache.......
  • java操作文件
    三种方式publicFile(Stringpathname)--通过指定的路径名字符串创建一个File对象。--若pathname指向的是文件,创建的File对象就表示文件;--若pathname指向的是目录......
  • leetcode java 杨辉三角
    简介杨辉三角是一道简单题,可以通过类似一层推下一层的方式进行计算,但是好像看过一个题解,采用的方式是组合数。本来想采用组合数,尝试了double溢出尝试了long溢出,尝试......
  • 发起HTTP请求方式汇总(Java)
    Java发起HTTP请求方式汇总Java发起HTTP请求方式汇总2021-01-07T16:31:40+08:00作为一个Java后端,需要通过HTTP请求其他的网络资源可以说是一个比较常见的case了;一般怎......
  • 【Java复健指南09】项目练习全解--房屋出租系统
    一个基于文本界面的综合练习,主要用于串联和回忆知识点,比较简单各个界面的设计样式主菜单=============房屋出租系统菜单============ 1新增房源 2查找房......
  • java.lang.IllegalArgumentException: Request header is too large
    该问题出现于接口使用get请求,参数的长度太长导致的问题,修复方案,将该接口的请求方式又get请求换成post请求即可进一步分析,两者都是http的请求方式,根本原因是浏览器和web服......
  • 如何判断Javascript函数是否是Async函数
     zhangfisher发布于 2021-04-13判断Javascript函数是否是Async函数有好几种方法:调用Object.prototype.toString.call(asyncfunction(){}),如果返回[objectAsy......
  • java接口
    接口接口描述了所具备的方法,并没有具体实现。具体的实现由接口的实现类来完成。接口定义使用interface关键字publicinterface接口名{静态常量;抽象方法;}接口的实现......
  • 2.Java API操作elasticsearch
    新建Maven工程添加依赖:<dependencies><dependency><groupId>org.elasticsearch</groupId><artifactId>elasticsearch</artifactId><ver......