`
nifoo
  • 浏览: 13556 次
  • 性别: Icon_minigender_1
  • 来自: 珠海
社区版块
存档分类
最新评论

【译】为什么要在Java中加入Lambda表达式

    博客分类:
  • Java
 
阅读更多
原文:http://www.lambdafaq.org/why-are-lambda-expressions-being-added-to-java/
作者:Maurice Naftalin
翻译:长风

Lambda表达式(以及闭包)在许多现代编程语言中都很普及。在为什么要在 Java 平台加入 Lambda 表达式呢?有众多原因中,最主要的原因是在编程时,可以让多线程并行处理 Collection(译注:包括 List 和 Set) 的代码变得容易编写。一般情况,我们写代码操作 List 和 Set,是先获取其迭代器(iterator),然后通过迭代器遍历每个元素,并依次处理。如果我们想要以并行的方式来处理不同的元素,只能我们自己编写代码来处理,Collection 并不提供任何支持。

在 Java 8 中,意图给 Collection 提供一些方法,我们可以给那些方法传入函数,然后方法内部再调用传入的函数去处理 Collection 中的元素。(后面我们会以 forEach 方法作一个例子,传一个函数给它去处理每一个元素)。这个变化会带来一个优点,那就是 Collection 可以在它的内部进行迭代,把客户代码的职责转移到库中。

然后,对客户代码来说,我们还需要提供一个简单的办法来把函数传给 Collection 的那些方法。目前的标准做法是,创建相应接口的一个匿名内部类。但是定义匿名内部类的语法太笨拙了。

例如,Collection 的 forEach 方法接受 Consumer 接口的一个实例,并且为每个元素调用它的accept方法:
interface Consumer<T> {void accept(T t);} 


现在假设我们有一个 list,list 内的元素都是 java.awt.Point 类型的,我们想要使用 forEach 方法来交换每个元素的x和y的值。使用匿名内部类的方式如下:
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
分享到:
评论

相关推荐

    Java:解锁Lambda表达式的魔法-从零开始的函数式编程之旅

    随着Lambda表达式的加入,Java程序员现在可以享受到函数式编程带来的诸多好处,如更简洁的代码、更高的代码可读性和可维护性。 **Lambda表达式的基本结构**: - **参数列表**:位于Lambda表达式的左侧,用于声明...

    Lambda表达式的相关用法

    Lambda and Anonymous Classes(I),展示如何使用Lambda表达式替代匿名内部类,说明Lambda表达式和函数接口的关系。 Lambda and Anonymous Classes(II),Lambda表达式的实现原理 Lambda and Collections,学习Java...

    Java Lambda 编程之道

    Java 8中的Lambda表达式允许开发者创建简洁的匿名函数,这些函数可以作为方法参数或者存储在变量中。这种新的编程范式让Java更加现代化,也使得开发者能够更好地处理集合操作、I/O操作以及并发编程等问题。 #### 二...

    Java 8 Lambdas

    Lambda表达式,也称为匿名函数,是一种能够在Java中实现匿名内部类简化写法的方式,它允许直接使用代码块,而不需要定义完整的方法。Lambda表达式为Java语言添加了函数式编程的能力,这使得编写代码更加简洁和灵活。...

    Java 8特性全面解析

    在Java中,Lambda表达式的类型是函数对象,它必须依赖于一种特殊的接口类型——函数式接口。函数式接口是一个只定义了一个抽象方法的接口。例如,java.util.function中的Consumer、Function等。Lambda表达式能够提升...

    Java 中文API 谷歌翻译

    Java API文档是Java开发者的重要参考资料,它详细列举了Java开发工具包(JDK)中的类、接口、方法和常量等元素,为编程提供指导。谷歌翻译版的JDK 1.8 API中文文档则是为了方便中国开发者阅读,将原本英文的API说明...

    写给大忙人看的Java SE 8

    lambda表达式(闭包)和流的加入代表了自泛型和注解依赖以来,Java语言发生的极大改变。  通过《写给大忙人看的Java SE 8》这本书,的Java作者 Cay S. Horstmann向我们介绍了Java 8 中极有价值的新特性(以及一些...

    Java_API_1.8中文 高清完整CHM版

    8. **类型推断增强**:Java 8增强了类型推断,使得在使用泛型和创建lambda表达式时,编译器能更好地推断出类型,减少冗余的类型声明。 9. **并发改进**:Java 8在`java.util.concurrent`包中加入了一些新特性,例如...

    java_api 1.8

    8. **类型推断增强**:Java 8增强了编译器的类型推断能力,使得在Lambda表达式和方法引用中,类型可以更少地显式指定。 9. **并发改进**:Java 8对`Fork/Join`框架进行了优化,提升了并行计算的效率,同时引入了`...

    Java-Java8十大特性详解教程

    Lambda表达式是Java 8中最显著的特性之一,它简化了函数式编程,使得处理集合数据变得更加简洁。Lambda允许你将匿名函数作为方法参数,或者作为一个可以赋值的对象。它们可以替代那些只包含单个抽象方法的接口的...

    JDK1.8 Java 官方 jdk-8u181-windows-x64.rar

    Lambda表达式使得Java的多线程编程(如ExecutorService)和集合操作(如Stream API)更加直观和高效。 2. **函数式接口** 函数式接口是只有一个抽象方法的接口,可以用作Lambda表达式的类型。例如,Runnable、...

    java 8 APi

    首先,Java 8在语言层面引入了显著的变化,其中最引人注目的是lambda表达式。Lambda表达式使得代码更加简洁、可读性更强,尤其是在处理函数式编程场景时,如集合操作、事件处理等。例如,`Stream API`配合lambda...

    JAVA_API_1.8_中文手册

    首先,Java 1.8在Lambda表达式方面的引入是一大亮点。Lambda表达式简化了函数式编程,使得编写简洁、可读性强的代码成为可能。例如,它可以用于Stream API,进行高效的数据处理和集合操作。Lambda表达式可以替代匿名...

    Oracle-MOOC-JDK8-Lambdas

    为什么在Java中需要lambda表达式。 为什么二十年后将此功能添加到Java。 lambda表达式的语法。 如何使用lambda表达式以及控制其使用的规则。 使用lambda表达式的类和方法的示例,例如Collections API中

    Pro Java 8 Programming, 3rd Edition-带完整目录书签文字版

    1. **Lambda表达式**:Java 8引入了Lambda表达式,它简化了函数式编程,允许以更简洁的方式处理函数。Lambda可以作为参数传递,也可以作为返回值。通过Lambda,你可以创建匿名函数,用于那些只需要一次性的、不需要...

    Java 最新版JDK1.8 (jdk-8u231-windows-x64)

    这些接口只有一个抽象方法,如`Runnable`、`Callable`和新加入的`Supplier`、`Consumer`、`Function`等,它们为Lambda表达式提供了类型安全的载体。 4. **Stream API**:Stream API是处理集合数据的新方式,它提供...

    java jdk1.8 64位

    1. **Lambda表达式**:这是Java 8引入的一项重大改进,使得函数式编程风格在Java中成为可能。Lambda表达式允许将匿名函数作为方法参数传递,简化了多路复用操作,如集合的流处理。 2. **方法引用**:方法引用是...

    code3.txt dfgd

    Java 8中引入了Lambda表达式,从文件内容中可以看到Lambda表达式用于为JButton的actionListener添加点击事件处理逻辑。Lambda表达式提供了一种简洁的方式编写匿名类。 ### 时间测量 文件中的代码还展示了如何测量...

Global site tag (gtag.js) - Google Analytics