Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能。 虽然最初为该发行版设想的某些功能已扩大范围或已推出到第9版,但实际上有数十个新功能。 许多新添加的内容在编译器,JVM或帮助系统级别都进行了后台改进。 这样,虽然我们可能会从中受益,但是我们不需要积极做任何事情(当然,除了安装Java 8以外)来享受它们。
话虽如此,让我们看一下您认为绝对必须了解的5个功能:
1. Lambda表达式
即使我们真的不想在这里成为主流,从开发人员的角度来看,毫无疑问,Java 8最主要的功能是对Lambda表达式的新支持。 这种语言的新增功能使Java成为功能编程的最前沿,在那里,其他基于功能JVM的语言(例如Scala和Clojure)就在Java中。
之前,我们已经研究了Java如何实现Lambda表达式 ,并将其与Scala所采用的方法进行了比较。 从Java的角度来看,这是迄今为止该语言中最大的新增功能之一。
至少,建议您熟悉Lambda语法,尤其是与数组和集合操作有关的地方,其中Lambda已紧密集成到核心语言库中。 很可能您会开始在第三方和组织代码中看到越来越多的代码,例如下面的代码段。
Map<Person.Sex, List<Person>> byGender =
roster.stream().collect(Collectors.groupingBy(Person::getGender));
*通过特定类字段的值对集合进行分组的一种非常有效的方法。
2.并行操作
通过将Lambda表达式添加到数组操作中,Java在内部迭代语言中引入了一个关键概念。 本质上,作为开发人员,我们习惯于将循环操作用作最基本的编程习惯用法之一,就在if和else之上。
Lambda表达式的引入扭转了这种范式,现在通过核心库本身对应用Lambda函数的集合进行实际迭代(即内部迭代)。
您可以将其视为迭代器的扩展,在该迭代器中,从要操作的集合中提取下一个项目的实际操作是由迭代器执行的。 这种设计模式带来的令人兴奋的可能性是,框架可以并行执行在长数组上执行的操作,例如排序,过滤和映射。 当处理连续处理冗长的集合的服务器代码时,这可以从根本上减少工作量,从而显着提高吞吐量。
这是与上述相同的代码段,但是使用了框架的新并行处理功能–
ConcurrentMap<Person.Sex, List<Person>> byGender =
roster.parallelStream().collect(
Collectors.groupingByConcurrent(Person::getGender));
*这是使此算法在多个线程上运行所需的相当小的更改。
3. Java + JavaScript =❤
Java 8正试图纠正其历史上最大的错误之一-Java与JavaScript之间的距离越来越大,这种距离在最近几年中才有所增加。 在此新版本中,Java 8引入了一个全新的JVM JavaScript引擎– Nashorn。 该引擎独特地利用了Java 7中引入的一些新功能,例如invokeDynamic,可以像V8和SpiderMonkey之类的功能为Java的 JavaScript执行提供JVM级的速度。
这意味着下次您打算将JS集成到后端中时,无需设置node.js实例,而只需使用JVM执行代码即可。 这里的额外好处是能够在Java和JavaScript代码进行过程中实现无缝互操作性,而不必使用各种IPC / RPC方法来弥合差距。
4.新的日期/时间API
多年来,当前的本机Java库API的复杂性一直是Java开发人员的痛苦原因。 多年来,Joda时间和Java 8一直在填补这种空白。一个早期出现的直接问题是,为什么Java 8不采用Joda作为其本地时间框架。 由于在Joda中被认为是设计缺陷,因此Java 8从零开始实现了自己的新日期/时间API。 好消息是,与Calendar.getInstance()不同, 新API的设计考虑了简单性,并且进行了清晰的操作以对人类可读格式和机器时间格式的操纵值进行操作。
5.并发蓄电池
并发编程中最常见的方案之一是更新由多个线程访问的数字计数器。 多年来,从同步块(引入了高级别的争用)到对AtomicInteger的读/写锁定,有许多惯用的方法可以做到这一点。 尽管最后一个更高效,但是由于它们直接依赖于处理器CAS指令,因此它们需要更高的熟悉度才能正确实现所需的语义。
使用Java 8,该问题在框架级别通过新的并发累加器类得以解决,使您能够以线程安全的方式非常有效地增加/减少计数器的值。 实际上,这不是口味或喜好问题的情况-在代码中使用这些新类确实很容易。
您认为每个开发人员都应该知道其他语言功能吗? 在评论部分添加它们。
翻译自: https://www.javacodegeeks.com/2014/03/5-features-in-java-8-that-will-change-how-you-code.html