http://blog.csdn.net/wwwsssaaaddd/article/details/24211475
Java8揭秘(一)
——Lambda表达式、Default方法和批量数据操作
(英文原文:Java 8 Revealed: Lambdas, Default Methods and BulkData Operations)
译者:为了更好的阅读本篇译文,先插入下面几个Java8中的新概念介绍: 函数接口(Functional Interface):只包含一个抽象方法的接口,所以也称为SAM(Single Abstract Method)类型的接口。例如我们比较熟悉的Runnable接口,只定义了唯一的一个抽象方法run(),就是函数接口。Java8中新增了许多函数接口,如果想进一步了解新增了哪些函数接口,以及为什么要新增如此众多的函数接口,可以从文章中找到答案。 Lambda表达式:实现函数接口,并返回该接口的一个匿名实现类对象的一种简明表达方式。特别强调两点:
Lambda工程:其目标是通过增加闭包等相关特性,使JAVA更好支持多核环境下的并行编程。 方法引用(Method Reference): Lambda表达式的一种特殊形式。当一个lambda表达式body中仅仅是调用某个方法,这种情况下,使用方法引用替代lambda表达式,从形式上直接引用这个方法,这就比在lambda表达式body中引用在形式上更简洁一些。 |
前言:
关于本篇文章,我一直零零散散写了几个月,目前已经把所有内容整合到一起,形成这份文档(可以在这里下载美观的PDF版本)。在本文中,我会讲讲大家期待已久的Java 8。虽然Java8在开发过程中出现了一些进度延迟,但是很多人认为即使多等些时间也是值得的,这么说完全是冲着java8中新增的三个特性:Lambda表达式,default方法(或称之为defender方法)和批量数据操作(bulk dataoperations)。
Lambda表达式项目,或许你之前没有听说过它,它是将要发布的Java 8的“主角”,也大概是Java工程师最期待的特性。Lambda表达式是一种语言特性,无法脱离JDK独立发布:你只有升级JDK才能使用Lambda表达式编写程序。
之所以产生如Lambda表达式等等这些新特性,背后的驱动力是硬件的多核化发展趋势。在此趋势下,芯片设计者只能采用多核并行的设计思路,而软件开发者必须能够更好地利用底层硬件的并发特性。对于应用开发者-在我们的案例中就是java程序员,需要能快速上手并行类库,提高工作效率。启动这样一种技术变革的最佳切入点是集合(collection)内部操作并行化。实践表明,Lambda表达式显著地增加代了码可读性和提升了Java语言的表现力。
越来越多的语言需要支持并行语法了,新的并行语法应该简明、直观和易用。
我们现今写的代码逻辑本质是串行执行的。如下面的例子:
List persons=asList(new Person("Joe"),new Person("Jim"),new Person("John")); for(Person person: persons){ doSomething(person); } |
Java集合(collection)诞生之初就不支持内部迭代,而其唯一迭代方式是通过for/while循环。上面的例子展示一个collection的迭代过程。如何表示“并发”地处理集合中的元素,这似乎没有很好的方式。但是,如果我们使用Java语言的新特性,就能以稍微不同的方式表示同样的迭代过程。如下:
List persons=asList(new Person("Joe"),new Person("Jim"),new Person("John")); persons.forEach(this::doSomething); |
如果(Java集合)底层类库支持并行操作,那么就可以并发处理集合元素了。就上面例子说,我们只要在forEach方法中实现并发地处理集合元素,然后调用forEach。实际上,Java8中的新特性都是用来建设多核并行类库的。
我们在这篇调研文章中,概述Java8中诸如Lambda表达式和default方法这样的语言新特性。因为这些新特性是来优化Java集合类库的使用,所以我们也会讲到一些集合范畴的新东西。
阅读这篇文章,你会了解到如下内容:
- Java8中的Lambda表达式:包括Lambda表达式语法,SAM类型,函数接口;
- Default方法:Why,What,How;
- Java集合的批量数据操作:新型的数据处理方式。
尽管Java8尚未发布,但是仍然可以从http://jdk8.java.net下载各目标平台的试用版本,进行体验。(译者按:java8已经在2014年4月初发布了GA版本)