Java8新特性: Lambda表达式!

1、Lambda表达式

把“一块代码”赋给了一个变量。而“这块代码”,或者说“这个被赋给一个变量的函数”,就是一个Lambda表达式。

但是这里仍然有一个问题,就是变量aBlockOfCode的类型应该是什么?

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

lambda 表达式的语法格式如下:


(parameters) -> expression
或
(parameters) ->{ statements; }

简单示例

Lambda 表达式的简单例子:

// 1. 不需要参数,返回值为 5  
() -> 5  
  
// 2. 接收一个参数(数字类型),返回其2倍的值  
x -> 2 * x  
  
// 3. 接受2个参数(数字),并返回他们的差值  
(x, y) -> x – y  
  
// 4. 接收2个int型整数,返回他们的和  
(int x, int y) -> x + y  
  
// 5. 接受一个 string 对象,并在控制台打印,不返回任何

注意事项

使用 Lambda 表达式需要注意以下两点:

Lambda 表达式主要用来定义行内执行的方法类型接口(例如,一个简单方法接口)。在上面例子中,我们使用各种类型的 Lambda 表达式来定义 MathOperation 接口的方法,然后我们定义了 operation 的执行。

Lambda 表达式免去了使用匿名方法的麻烦,并且给予 Java 简单但是强大的函数化的编程能力。

在这个 Lambda 表达式中,“it” 是一个隐式参数,代表函数所接收的单个参数。在 Java 中,当 Lambda 表达式只有一个参数时,可以使用 “it” 来代替它,从而简化代码。在你提供的例子中,“.map(it -> it.multiply())” 中的 “it” 表示 map() 方法所接收的单个参数。

具体来说,这个 Lambda 表达式的作用是将列表中的每个元素都调用 multiply() 方法,然后返回一个包含了新元素的列表。在这个例子中,假设列表的元素类型是一个类,类中有一个名为 multiply() 的方法,那么这个 Lambda 表达式就可以这样使用:

scssCopy codeList<MyClass> myList = Arrays.asList(new MyClass(2), new MyClass(3), new MyClass(4));
List<MyClass> multipliedList = myList.stream()
                                     .map(it -> it.multiply())
                                     .collect(Collectors.toList());

在这个例子中,我们首先创建了一个包含了 MyClass 类型对象的列表,然后使用 Lambda 表达式对列表中的每个元素都调用 multiply() 方法,并将结果收集到一个新列表中。

需要注意的是,虽然在这个例子中使用了 “it” 作为参数名,但是你可以使用任何其他合法的参数名来代替 “it”。例如,你可以这样写 Lambda 表达式:

scssCopy codeList<MyClass> multipliedList = myList.stream()
                                     .map(obj -> obj.multiply())
                                     .collect(Collectors.toList());

在这个例子中,我们使用了 “obj” 作为参数名。这里的关键是在 Lambda 表达式中只有一个参数,并且使用了这个参数的隐式参数 “it”(或其他自定义参数名)。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值