用通俗易懂的大白话搞明白Java里的函数式编程和Lambda表达式

今天,用通俗易懂的大白话来彻底搞明白Java里的函数式编程和Lambda表达式

为什么引入函数式编程,lambda表达式?

大家都知道,JDK1.8引入了函数式编程,lambda表达式。

那有没有想过,为什么引入这个东西?没它之前我代码不也写的好好的吗?

我个人的理解,JDK的每次升级,无非是围绕三方面:提升安全性、提升效率、简化书写。

比如:

1、JDK1.5引入泛型,是为了安全性方面的考虑;

关于泛型的知识,如果感兴趣,可以看我之前的文章:Java基础知识之泛型以及自定义泛型

2、JDK1.6引入自旋锁、偏向锁、轻量级锁等等一些手段,对synchronized进行优化,是为了提升效率;

关于synchronized以及这些锁的升级过程,感兴趣的话,看我另外一篇:Synchronized、偏向锁、自旋锁、轻量级锁以及锁的升级过程

3、而JDK1.8引入函数式编程,主要是为了简化书写。

关于函数式编程和Lambda表达式,本篇来讲

我最近开通了几个专栏,里边有更多用大白话讲的干货,全部都是我自己对一些知识点的理解,绝对干货,不拖泥带水,感兴趣的小伙伴可以去看看,专栏持续更新中,后期会持续更新更多的大白话干货

通俗易懂的大白话干货系列

带你玩转实际工作中的Jenkins系列

ok,进入今天的正题吧

你可能需要了解的一些东西

首先需要简单了解一下函数式编程的思想:函数式编程的思想简单来说就是,可以在书写代码的过程中将一个行为过程作为参数进行传递,主要目的是为了简化书写

它的底层实现其实还是匿名内部实现类,不懂匿名内部类的需要补一下基础知识

函数式接口最大的特征就是,这个接口里只能有一个待实现的方法。

所以我理解的是,以前的匿名内部类,既可以满足只有一个待实现方法的情况,也可以满足多个待实现方法的情况;但是函数式的这种,它只能用于只有一个待实现方法的情况
所以,我觉得函数式编程只是匿名内部类的一种特殊情况而已,它只能满足匿名内部类能满足的众多情况中的其中一种,只是它的写法上形式上和之前的匿名内部类有所不同(仅此而已,它底层还是匿名内部类,并且规定你匿名内部类实现的这个接口里只能有一个方法),并且它在书写格式上进行了大大的简化,因为把它弄出来的主要目的就是为了简化书写。这是我对函数式编程和匿名内部类的一些理解,我认为这个很重要。

上述这段话,可以先作为一个了解,如果暂时不理解的话,问题也不大。

有疑问很正常,继续往下看,花几分钟看完文章后,保证给你整的明明白白的。

一、初识Lambda

1、基本语法

到目前为止,如果对Java里的函数式编程和Lambda表达式一点都没有了解的话,可以先看一下我另外一篇对函数式编程和Lambda进行简短介绍的文章:JDK8 Lambda表达式

对函数式编程和Lambda有了一些简单的了解后,可以发现下面的内容,是我们对Lambda最直观的认识:

( ) -> { }

上边是Lambda表达式最基本的语法:左边的括号里是参数,中间是一个横杠箭头 -> ,右边的花括号里是表达式或代码块;

举个例子,比如:

(String name)->{
    return "姓名:" + name;
}

上边这种写法,大家应该不陌生吧,咱们大部分情况下都是直接把上边的这种Lambda表达式作为一个参数,传递到 某个需要这种函数式接口作为参数的方法里。

其实,咱们也可以把Lambda表达式 在等号左边用个函数式接口来接受一下它的,比如下边这种写法:上边的例子,如果左边接收的类型补全的话,是这样的:

Function<String,String> functiona = (String name)->{
    return "姓名:" + name;
};

那左边接收Lambda表达式的这个到底是个啥东西呢?它其实就是个普普通通的接口,只不过这个接口里只有一个待实现的方法(仅此而已)。如果有不理解的,也没事,脑子里先有这么个概念就行,具体的内容,等会儿下边会慢慢讲到。

2、简写形式

如果你了解的再深入一点点的话,肯定会知道上边的语法也可以简写

那简写的规则是啥呢?我理解的,大白话来说大概就两点:

一、左边括号里的参数类型可以省略,而且如果只有一个参数的话,连左边的括号也可以省略不写

二、右边花括号里如果只有一行代码,那么,花括号、return和分号,这三个可以一起省略不写

按照上边总结的简写规则:左边参数类型去掉,又因为只有一个参数,参数的括号也去掉;右边只有一行代码,所以花括号、return和分号,这三个一起省略不写。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

曹举的个人博客

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值