加入收藏 | 设为首页 | 会员中心 | 我要投稿 拼字网 - 核心网 (https://www.hexinwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

让代码更精简 细说Java 8 Lambda表达式

发布时间:2017-08-09 06:15:18 所属栏目:教程 来源:核子可乐编译
导读:Java 8中的Lambda表达式给该语言带来了一系列改进。这种新型表达式的出现让一部分代码更易于查看及编写,特别是对于那些能够以函数形式表达的代码而言。Lambda表达式还为Java语言带来更加丰富的表达能力,并使多种操作在运行时当中获得更为高效的执行效果。通

  Lambda表达式有助于简化Java Collection的使用流程,而且对于在Java 8之前就已经存在的Collection也同样适用。除此之外,Collection中还加入了大量能够与Lambda表达式顺畅协作的内容,其中包括在每个Iterator及Iterableinterface上被定义的新型forEach()方法。

  举例来说(仍然引用自甲骨文官方教程),我们可以为Personclass定义一个List,并假设其下包含一个age成员:

List<Person> pl = Person.createShortList();

  接下来,我们可以定义一个Predicate来选择列表中的内容:

Predicate<Person> allDrivers = p -> p.getAge() >= 16;

  最后,我们能够对来自该List的选择内容进行操作:

someClass.doSomething(pl, allDrivers);

  经过比较,大家应该会发现Java 8在处理同一项任务时、代码要比前续版本表现得更为紧凑。

  如果我们需要完成一些更为复杂的操作,使用前面提到过的forEach()方法相信能够达到目的:

pl.forEach( p -> p.printWesternName() );

  假设大家希望一次性使用多个Predicate,那么新近登场的filter()方法无疑是最好的帮手——它能够将Predicate作为参数加以处理,从而使用户得以把多个方法串联起来:

pl.stream().filter(search.getCriteria("allPilots")) 
  .forEach(Person::printWesternName);

  经过认真考量,大家应该会发现这种串联化filter在效率上要远远优于之前以手动方式为Collection成员编写循环。不符合前期标准的成员将全部被丢弃,而不再被继续传递到后续filter机制当中。

  大家可能还注意到了我们在代码开头所使用的stream()方法——我们需要借此来启用串联机制。在这里,stream()方法将Collection作为输入内容,并将java.util.stream.Stream接口作为输出内容。所谓Stream,代表着一系列能够作为不同方法串联基础的元素。Stream能够以串行或者并行方式(使用parallelStream方法)付诸执行,这就给进一步提升性能表现带来了发挥空间。Stream会在使用结束后被自动处理掉。如果大家希望保留这些结果,可以将其复制到其它Collection当中。

  我们当然还可以进一步讨论aggregate与map等方法,但相信说到这里大家已经对这套新机制拥有了初步概念。

  综上所述,Java 8中的Lambda表达式给该语言带来了一系列改进。这种新型表达式的出现让一部分代码更易于查看及编写,特别是对于那些能够以函数形式表达的代码而言。Lambda表达式还为Java语言带来更加丰富的表达能力,并使多种操作在运行时当中获得更为高效的执行效果。通过LINQ与Lambda表达式在.Net开发环境下的表现,可以肯定的是其在为Java带来诸多改进之外并不会破坏现有面向对象特性。它的加入将使Java语言变得更加丰富、强大与精致。

(编辑:拼字网 - 核心网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!