浅析Java 8中Lambda 表达式

简介: 浅析Java 8中Lambda 表达式

前言


  Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。λ表达式由三部分组成:参数列表,箭头(->),以及一个表达式或语句块。Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。使用 Lambda 表达式可以使代码变的更加简洁紧凑。


什么是Lambda 表达式


  Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。


Lambda 表达式语法


Lambda 等效的方法引用

(Apple a) -> a.getWeight() Apple::getWeight

() -> Thread.currentThread().dumpStack() Thread.currentThread()::dumpStack

(str, i) -> str.substring(i) String::substring

(String s) -> System.out.println(s) System.out::println


Lambda 表达式特点


  • 可选类型声明:不需要声明参数类型,编译器可以统一识别参数值。
  • 使用 Lambda 表达式可以使代码变的更加简洁紧凑。
  • 可选的参数圆括号:一个参数无需定义圆括号,但多个参数需要定义圆括号。
  • 可选的大括号:如果主体包含了一个语句,就不需要使用大括号。
  • 可选的返回关键字:如果主体只有一个表达式返回值则编译器会自动返回值,大括号需要指定明表达式返回了一个数值。

Lambda 表达式注意事项


  • Lambda 表达式主要用来定义行内执行的方法类型接口,例如,一个简单方法接口。在上面例子中,我们使用各种类型的Lambda表达式来定义MathOperation接口的方法。然后我们定义了sayMessage的执行。
  • Lambda 表达式免去了使用匿名方法的麻烦,并且给予Java简单但是强大的函数化的编程能力。

Lambda 表达式示例:


无参数,返回值为 info


() -> info


接收一个参数(数字类型),返回其5倍的值


x -> 5 * x 


接受2个参数(数字),并返回他们的差值


(x, y) -> x – y 


接收2个int型整数,返回他们的和


(int x, int y) -> x + y 


接受一个 string 对象,并在控制台打印,不返回任何值(看起来像是返回void)


(String s) -> System.out.print(s)


  当然,上面只是简单的Lambda 表达式的应用。还有使用多个简单Lambda 表达式组成的复合 Lambda 表达式。例如: 函数复合、谓词复合、比较器复合等各种形式的组合起来的Lambda表达式。


总结


  本文简单的介绍了Java 8中的新特性--Lambda 表达式。总体来说还是比较容易的,也能很快的入门。针对项目中可以多加练习使用,能够使代码变的更加简洁紧凑。还是很值得学习的。



目录
相关文章
|
3天前
|
Java 开发者
Java中的Lambda表达式:简化你的代码之旅
【8月更文挑战第17天】 在编程的海洋中,简洁是航行的风帆。Lambda表达式,作为Java 8的一大亮点,为开发者提供了一种更为紧凑、易读的编码方式。本篇文章将带你领略Lambda表达式的魅力,从基础概念到实际应用,让你的代码像诗句一样流畅。
13 4
|
11天前
|
存储 算法 Oracle
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
19 Java8概述(Java8概述+lambda表达式+函数式接口+方法引用+Stream+新时间API)
39 8
|
8天前
|
并行计算 Java 程序员
探索Java中的Lambda表达式
在Java 8中,引入了Lambda表达式,这一特性极大地简化了代码,提高了开发效率。本文将通过浅显易懂的语言和生动的比喻,带你一步步了解Lambda表达式的魅力所在,从基础语法到实际应用,让你轻松掌握这一强大的工具。
18 1
|
4天前
|
Oracle Java 关系型数据库
Java10 Lambda 设计和实现问题之在双流 concat 的场景中,确保 s1 和 s2 流水线上的算子与 s3 流水线上的算子正确串联起来,如何实现
Java10 Lambda 设计和实现问题之在双流 concat 的场景中,确保 s1 和 s2 流水线上的算子与 s3 流水线上的算子正确串联起来,如何实现
|
4天前
|
Java API
Java9 Lambda 设计和实现问题之IntStream, LongStream 等类型特定的流接口基于 AbstractPipeline 是如何实现的
Java9 Lambda 设计和实现问题之IntStream, LongStream 等类型特定的流接口基于 AbstractPipeline 是如何实现的
|
4天前
|
Java API
Java8 Lambda 设计和实现问题之在Java 8的Stream API中,parallel=false时collect方法是如何实现的
Java8 Lambda 设计和实现问题之在Java 8的Stream API中,parallel=false时collect方法是如何实现的
|
5天前
|
Java
Java Lambda Stream
Java Lambda Stream
11 0
|
5天前
|
机器学习/深度学习 XML 安全
Java正则表达式基础
Java正则表达式基础
9 0
|
8天前
|
Java API 开发者
震撼!Java 8 中 Lambda 表达式与 Stream API 带来的编程革命超乎想象!
【8月更文挑战第12天】Java 8 引入了 Lambda 表达式和 Stream API,极大地提升了编程效率与代码可读性。Lambda 表达式简化了匿名函数的定义,如快速定义数学运算 `(a, b) -> a + b`。Stream API 提供了一种声明式数据处理方式,能够流畅地完成过滤、映射等操作,减少循环结构的复杂性。两者结合,让 Java 代码更加简洁高效,易于理解和维护。
20 0
|
Java Unix 数据库管理
java定时框架:表达式设置
Quartz中时间表达式的设置-----corn表达式 (注:这是让我看比较明白的一个博文,但是抱歉,没有找到原作者,如有侵犯,请告知)   时间格式: ,   分别对应: 秒>分>小时>日>月>周>年,  举例: 1.
858 0