Lambda表达式基础(2)-为什么java要引入Lambda表达式?

为什么java要引入Lambda表达式?

在现代许多编程语言中Lambda表达式(闭包)是一个很流行的特性。在Java平台引入lambda的众多原因之中最显著的原因之一是Lambda使得更容易在多线程中分布处理集合。现在,lists和sets典型的处理方式是由客户端代码从集合中获取一个迭代器,然后使用该迭代器依次处理它的元素,如果不同元素的处理要并行进行,那么只能由是客户端代码实现而集合对此无能为力。

在Java8中,目的是,不是要提供给集合这样一些方法,他们有一定的功能且每一个以不同的方式来处理他们的元素。(我们将用一个简单的forEach方法作为例子,这个方法传入一个函数来处理每个元素)。这种变化带来的好处是,集合现在可以组织自己的内部迭代,将并行化的责任从客户端代码转为内部库实现。

然而客户端代码要利用这一点,就需要有一种简单方式来为集合方法提供一个函数。当前标准做法是通过匿名内部类实现相应的接口来实现。但为了达到这一目标,用于定义匿名内部类的语法太笨重而不实用。

例如,在集合中的forEach方法会传入一个Consumer 接口的实例,并为每一个元素调用它的accept方法。
interface Consumer<T> { void accept(T t); }

假设我们要使用forEach来调换一个java.awt.Point对象列表中的每个元素的x和y坐标。我们会通过使用Consumer接口的匿名内部类实现来传递转换函数:
pointList.forEach(new Consumer<Point>() {
public void accept(Point p) {
p.move(p.y, p.x);
}
});

然而用Lambda表达式实现同样的效果要简洁的多
pointList.forEach(p -> p.move(p.y, p.x));

原文链接:http://www.lambdafaq.org/why-are-lambda-expressions-being-added-to-java/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值