Lambda FAQ_2.为什么在Java中加入Lambda表达式?

来源:互联网 发布:旅游景点介绍软件 编辑:程序博客网 时间:2024/05/21 22:32

为什么在Java中加入Lambda表达式?

Lambda表达式(和闭包)在许多现代编程语言中都是一个很普及的特性。在为什么把Lambda表达式加入Java平台的众多原因中,最有说服力的原因之一是使用多线程对集合类的分布式处理变得容易了。目前,list和set被操作的典型场景是客户端获取迭代器(iterator),然后通过迭代器取出每个元素并处理。如果不同元素的处理需要改为并行方式,这只能由客户端的代码来负责,而不是管理元素的集合类。


在Java8中,意图是提供集合能够使用的函数并用此函数以不同的方式处理每一个元素(我们将会展示一个示例,这个示例使用一个非常简单的方法foreach处理每个元素)。这个改变带来的优势是集合现在能够在内部组织对集合自身的迭代,将并行的责任从客户代码转移到库代码上。


然而,对于客户端代码来说要使用这种优势,必须以一种简单的方式提供一个函数给集合方法。目前标准的方式是实现合适接口的匿名类。但是定义匿名内部类的语法对于这个目的而言太笨拙。


例如,集合上的forEach方法接受consumer接口的实例,并且为每个元素调用示例的accept方法:

interface Consumer<T> {void accept(T t);}

假设有一个集合,集合元素类型是java.awt.Point,我们想要使用**forEach**方法来交换每个元素的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));

原文地址

原文地址



0 0
原创粉丝点击