• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

详解Java中的Lambda表达式

java 搞代码 4年前 (2022-01-09) 27次浏览 已收录 0个评论

Java 目前已经出到13的版本,但是国内大部分公司应该都停留在 Java 8 的版本(不敢承担升级带来的风险)。在Java8中给我们带来了 Lambda表达式和Stream流式操作,提供了函数式编程和本文来源gao.dai.ma.com搞@代*码(网$简化批处理操作。可能大家日常使用很多,但是很少去关注Lambda 和 Stream实现。本篇就带着大家一起关注这两块知识,搬好小板凳我们一起看电视。

什么是Lambda

简单来说,编程中提到的 lambda 表达式,通常是指需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数。

一般我们使用变量来进行赋值操作:

但是在 Java8 之前是没有提供将一个方法赋值给一个变量的操作:

在 JavaScript 中有 闭包的概念,所以 Java不甘落后,也去学习了人家,搞出了匿名函数的概念。

在Java 8里面,所有的Lambda的类型都是一个接口,而Lambda表达式本身,也就是”那段代码“,需要是这个接口的实现。这是我认为理解Lambda的一个关键所在,简而言之就是,Lambda表达式本身就是一个接口的实现。

基本语法:

(parameters) -> { expression or statements }

示例:

// 无参数, 返回1+2的结果
() -> 1+2;

// 接收一个参数(数字类型),返回其2倍的值
x -> 2 * x;

// 接收2个参数(数字),返回表达式运算的结果
(x, y) -> x + y;

// 多个语句要用大括号包裹, 并且返回值要用return指明
(x, y) -> {
	int result = x + y;
	System.out.print(result);
	return result;
};

Lambda表达式有如下约定:

  • 一个 Lambda 表达式可以有零个或多个参数;
  • 参数的类型既可以明确声明,也可以根据上下文来推断。例如:(int a)与(a)效果相同;
  • 所有参数需包含在圆括号内,参数之间用逗号相隔。例如:(a, b) 或 (int a, int b) 或 (String a, int b, float c);
  • 空圆括号代表参数集为空。例如:() -> 42;
  • 当只有一个参数,且其类型可推导时,圆括号()可省略。例如:a -> return a*a;
  • Lambda 表达式的主体可包含零条或多条语句;
  • 如果 Lambda 表达式的主体只有一条语句,花括号{}可省略。匿名函数的返回类型与该主体表达式一致;
  • 如果 Lambda 表达式的主体包含一条以上语句,则表达式必须包含在花括号{}中(形成代码块)。匿名函数的返回类型与代码块的返回类型一致,若没有返回则为空。

@FunctionalInterface 是 Java 8 新加入的一种接口,用于指明该接口类型声明是根据 Java 语言规范定义的函数式接口。Java 8 还声明了一些 Lambda 表达式可以使用的函数式接口,当你注释的接口不是有效的函数式接口时,可以使用 @FunctionalInterface 解决编译层面的错误。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:详解Java中的Lambda表达式

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址