JAVA8之lambda表达式详解

您所在的位置:网站首页 16亩地是多少 JAVA8之lambda表达式详解

JAVA8之lambda表达式详解

2024-06-19 00:05:31| 来源: 网络整理| 查看: 265

Lambda 表达式 − Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)

Lambda表达式是JAVA8中提供的一种新的特性,它支持JAVA也能进行简单的“函数式编程”。

它是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。

先看几个例子: 1.使用lambda表达式实现Runnable

2.使用lambda表达式实现Comparator

3.使用lambda表达式实现ActionListener

好了,通过上述的几个例子,大家差不多也能明白了lambda是用来干什么以及好处了。

显而易见的,好处就是代码量大大减少了!程序逻辑也很清晰明了。 它的用处浅显来说就是替代“内部匿名类”、可以对集合或者数组进行循环操作。

以前: 面向对象式编程就应该纯粹的面向对象,于是经常看到这样的写法: 如果你想写一个方法,那么就必须把它放到一个类里面,然后new出来对象,对象调用这个方法。 匿名类型最大的问题就在于其冗余的语法。 有人戏称匿名类型导致了“高度问题”(height problem): 比如大多匿名内部类的多行代码中仅有一行在做实际工作。

因此JAVA8中就提供了这种“函数式编程”的方法 —— lambda表达式,供我们来更加简明扼要的实现内部匿名类的功能。

什么时候可以使用它?

先说一个名词的概念

函数式接口:Functional Interface. 定义的一个接口,接口里面必须 有且只有一个抽象方法 ,这样的接口就成为函数式接口。 在可以使用lambda表达式的地方,方法声明时必须包含一个函数式的接口。 (JAVA8的接口可以有多个default方法)

任何函数式接口都可以使用lambda表达式替换。 例如:ActionListener、Comparator、Runnable

lambda表达式只能出现在目标类型为函数式接口的上下文中。

注意: 此处是只能!!! 意味着如果我们提供的这个接口包含一个以上的Abstract Method,那么使用lambda表达式则会报错。 这点已经验证过了。

场景: 这种场景其实很常见: 你在某处就真的只需要一个能做一件事情的函数而已,连它叫什么名字都无关紧要。 Lambda 表达式就可以用来做这件事。

写法、规则1. 类型推导

编译器负责推导lambda表达式的类型。它利用lambda表达式所在上下文所期待的类型进行推导,

这个被期待的类型被称为目标类型。就是说我们传入的参数可以无需写类型了!

2.变量捕获

在Java SE 7中,编译器对内部类中引用的外部变量(即捕获的变量)要求非常严格:

如果捕获的变量没有被声明为final就会产生一个编译错误。

我们现在放宽了这个限制——对于lambda表达式和内部类,

我们允许在其中捕获那些符合有效只读(Effectively final)的局部变量。

简单的说,如果一个局部变量在初始化后从未被修改过,那么它就符合有效只读的要求,

换句话说,加上final后也不会导致编译错误的局部变量就是有效只读变量。

注意:此处和final关键字一样,指的是引用不可改!(感觉没多大意义,还不是用的final)

3.方法引用

如果我们想要调用的方法拥有一个名字,我们就可以通过它的名字直接调用它。

Comparator byName = Comparator.comparing(Person::getName);

此处无需再传入参数,lambda会自动装配成Person类型进来然后执行getName()方法,而后返回getName()的String

方法引用有很多种,它们的语法如下:

静态方法引用:ClassName::methodName

实例上的实例方法引用:instanceReference::methodName

超类上的实例方法引用:super::methodName

类型上的实例方法引用:ClassName::methodName

构造方法引用:Class::new

数组构造方法引用:TypeName[]::new

4.JAVA提供给我们的SAM接口

Java SE 8中增加了一个新的包:java.util.function,它里面包含了常用的函数式接口,例如:

那么在参数为这些接口的地方,我们就可以直接使用lambda表达式了!



【本文地址】

公司简介

联系我们

今日新闻


点击排行

实验室常用的仪器、试剂和
说到实验室常用到的东西,主要就分为仪器、试剂和耗
不用再找了,全球10大实验
01、赛默飞世尔科技(热电)Thermo Fisher Scientif
三代水柜的量产巅峰T-72坦
作者:寞寒最近,西边闹腾挺大,本来小寞以为忙完这
通风柜跟实验室通风系统有
说到通风柜跟实验室通风,不少人都纠结二者到底是不
集消毒杀菌、烘干收纳为一
厨房是家里细菌较多的地方,潮湿的环境、没有完全密
实验室设备之全钢实验台如
全钢实验台是实验室家具中较为重要的家具之一,很多

推荐新闻


图片新闻

实验室药品柜的特性有哪些
实验室药品柜是实验室家具的重要组成部分之一,主要
小学科学实验中有哪些教学
计算机 计算器 一般 打孔器 打气筒 仪器车 显微镜
实验室各种仪器原理动图讲
1.紫外分光光谱UV分析原理:吸收紫外光能量,引起分
高中化学常见仪器及实验装
1、可加热仪器:2、计量仪器:(1)仪器A的名称:量
微生物操作主要设备和器具
今天盘点一下微生物操作主要设备和器具,别嫌我啰嗦
浅谈通风柜使用基本常识
 众所周知,通风柜功能中最主要的就是排气功能。在

专题文章

    CopyRight 2018-2019 实验室设备网 版权所有 win10的实时保护怎么永久关闭