资讯专栏INFORMATION COLUMN

JAVA Lambda表达式

Cheng_Gang / 1460人阅读

摘要:语言是强类型面向对象的语言,所以必须提供一种数据类型作为表达式的返回值类型符合中函数格式的定义符合面向对象规则,所以最终表达式要有一个映射成对象的过程。定一个函数式接口我们在接口里定义了一个没有参数返回值的抽象方法。

在JAVA中,“Lambda 表达式”(Lambda expression)是一个抽象方法的实现。这个抽象方法必须是在接口中声明的,而且实现类只需要实现这一个抽象方法,我们称这种接口为函数式接口。Lambda表达式就是函数式接口的实现,来完成对数据的处理。

基本函数的格式

JAVA函数通常是我们类中定义的行为,格式如下:

修饰符 返回类型 函数名(参数列表){
    语句块
    return 返回值;
}

修饰符:函数的可见性,决定函数的使用范围

返回类型:函数的输出信息,与return配合使用

函数名:函数标识

参数列表:函数的输入信息

语句块:函数执行的操作

这就是函数的基本格式。
代码中函数名,返回类型是一定要有的,其他的可有可无。
所以代码中最简单的函数定义格式如下:

返回类型 函数名();
Lambda表达式格式

我们说Lambda表达式是一个匿名函数,那我们来看一下Lambda表达式的格式。

(参数列表) -> {语句块}

参数列表:函数的输入信息

->: Lambda表达式关键符(也可以理解成关键字)

语句块:函数执行的操作

“->”是必须有的,我们来看下最简单的Lambda表达式结构:

() -> {}

Lambda表达式是一个表达式,程序中被作为一个值来使用。JAVA语言是强类型面向对象的语言,所以必须提供一种数据类型作为Lambda表达式的返回值类型、符合JAVA中函数格式的定义、符合面向对象规则,所以最终Lambda表达式要有一个映射成JAVA对象的过程。

函数式接口

函数式接口是用来完成Lambda表达式映射成JAVA对象的一种接口,确切的说把接口中仅存的一个抽象方法和Lambda表达式绑定并完成对象的实例化。

那么接口是如何与Lambda表达式建立类型关系的?

接口的抽象方法。下面举例说明。

定一个函数式接口

/**
 * @author Stephen Yue
 */
public interface Nothing {
    void doNothing();
}

我们在接口里定义了一个没有参数、返回值的抽象方法。

接口我们定义好了,需要我们定义接口的实现方式。我们选取Lambda表达式来完成这个实现。

// 指定接口中方法的实现过程并创建对象
Nothing nothing = () -> {};
nothing.doNothing();

给Nothing接口中doNothing方法指定了一个空实现的Lambda表达式。即没有参数、没有返回值、什么都不做的一个空实现。所以执行之后没有任何结果。我们改一下实现方式。

Nothing nothing = () -> {
        System.out.println("hello Lambda!");
    };
nothing.doNothing();

新的Lambda表达式实现同样符合接口中抽象方法定义的要求,不过程序执行完,会在控制台输出:hello Lambda!

总结

Lambda表达式的出现,提供了新的接口实现方式。接口中抽象方法名字是Lambda表达式的标识符,接口中参数类型对应Lambda表达式的参数类型,接口中返回类型对应Lambda表达式返回类型,Lambda表达式的语句块来完成抽象方法的逻辑实现。

Lambda表达式的优点:

简码

面向函数式编程(也可以理解面向接口编程)

闭包

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/70750.html

相关文章

  • 深入浅出 Java 8 Lambda 达式

    摘要:在支持一类函数的语言中,表达式的类型将是函数。匿名函数的返回类型与该主体表达式一致如果表达式的主体包含一条以上语句,则表达式必须包含在花括号中形成代码块。注意,使用表达式的方法不止一种。 摘要:此篇文章主要介绍 Java8 Lambda 表达式产生的背景和用法,以及 Lambda 表达式与匿名类的不同等。本文系 OneAPM 工程师编译整理。 Java 是一流的面向对象语言,除了部分简...

    wdzgege 评论0 收藏0
  • Java 8 Lambda 达式详解

    摘要:表达式简介表达式是一个匿名函数对于而言并不很准确,但这里我们不纠结这个问题。如果表达式的正文有一条以上的语句必须包含在大括号代码块中,且表达式的返回值类型要与匿名函数的返回类型相同。 版权声明:本文由吴仙杰创作整理,转载请注明出处:https://segmentfault.com/a/1190000009186509 1. 引言 在 Java 8 以前,若我们想要把某些功能传递给某些方...

    haoguo 评论0 收藏0
  • 转 | Java8初体验(一)lambda达式语法

    摘要:初体验下面进入本文的正题表达式。接下来展示表达式和其好基友的配合。吐槽一下方法引用表面上看起来方法引用和构造器引用进一步简化了表达式的书写,但是个人觉得这方面没有的下划线语法更加通用。 感谢同事【天锦】的投稿。投稿请联系 tengfei@ifeve.com 本文主要记录自己学习Java8的历程,方便大家一起探讨和自己的备忘。因为本人也是刚刚开始学习Java8,所以文中肯定有错误和理解偏...

    Lucky_Boy 评论0 收藏0
  • Java Lambda达式

    摘要:表达式的主要作用就是代替匿名内部类的烦琐语法。从这点来看,表达式的代码块与匿名内部类的方法体是相同的。与匿名内部类相似的是,由于表达式访问了局部变量,该局部变量相当于与一个隐式的修饰,因此不允许对局部变量重新赋值。 函数式接口 函数式接口(Functional Interface)就是一个只有一个抽象方法(可以包含多个默认方法或多个static方法)的普通接口,可以被隐式转换为lamb...

    lewif 评论0 收藏0
  • Java Lambda 达式(又名闭包 (Closure)/ 匿名函数 ) 笔记

    摘要:表达式又名闭包匿名函数笔记根据终于在中引入了表达式。函数式接口要介绍中表达式的实现,需要知道什么是函数式接口。但同样需要保证外部的自由变量不能在表达式中被改变。 Java Lambda 表达式(又名闭包 (Closure)/ 匿名函数 ) 笔记 根据 JSR 335, Java 终于在 Java 8 中引入了 Lambda 表达式。也称之为闭包或者匿名函数。 showImg(https...

    fou7 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<