Java 8中的5个功能将改变您的编码方式

Java 8在JVM和语言级别都包含了一些非常令人兴奋的功能。 虽然最初为该发行版设想的某些功能已扩大范围或已推出到第9版,但实际上有数十个新功能。 许多新添加的内容在编译器,JVM或帮助系统级别都进行了后台改进。 这样,虽然我们可能会从中受益,但是我们不需要积极做任何事情(当然,除了安装Java 8以外)来享受它们。 Duke_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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/364778.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java相关资料分享(视频+电子书籍)

关注微信公众号【Java典籍】&#xff0c;获取百度网盘提取码 ▼微信扫一扫下图↓↓↓二维码关注 转载于:https://www.cnblogs.com/bingyimeiling/p/10279049.html

vue项目 一行js代码搞定点击图片放大缩小

一行js代码搞定xue项目需要点击图片放大缩小&#xff0c;其实主要用的是用到了vue:class的动态切换&#xff0c;内容比较简单。一开始我把维护的需求想得太复杂了&#xff0c;和测试小姐姐聊了一下才反应过来。 两个月不到跟了四个项目&#xff0c;现在是维护改bug阶段&#x…

指针系统学习8-小结

1.有关指针的数据类型的小结 2.指针运算小结 一、指针变量加&#xff08;减&#xff09;一个整数,会指向上&#xff08;下&#xff09;1&#xff08;i&#xff09;个元素  例如&#xff1a;&#xff50;&#xff0b;&#xff0b;、&#xff50;&#xff0d;&#xff0d;、&am…

java项目中外接扫描仪无法使用_java – 扫描仪行不可用错误

我用两种不同的方法从两个不同的扫描仪对象调用Scanner.nextLine()方法.有时当我从第二种方法调用Scanner.nextLine()时,它会给我一个“行不可用”错误.可能是什么问题&#xff1f;import java.util.Scanner;public class TicTacToe {private final String COMPUTER "com…

Spring集成–使用RMI通道适配器

1.引言 本文介绍了如何使用Spring Integration RMI通道适配器通过RMI发送和接收消息。 它由以下部分组成&#xff1a; 实施服务&#xff1a;第一部分着重于创建和公开服务。 实现客户端&#xff1a;显示如何使用MessagingTemplate类调用服务。 抽象SI逻辑&#xff1a;最后&a…

mybatis 直接执行sql 【我】

Connection conn getConnection();// Connection conn this.ss.getConnection(); 返回Connection对象 try { String sql "UPDATE PARTY SET PARTY_NAME 测试0000 WHERE PARTY_ID 0;UPDATE PARTY SET PARTY_NAME 测试1111 WH…

jquery点击非div区域隐藏div

点击非div区域隐藏div&#xff0c;如图&#xff0c;点击圆的头像&#xff08;.person-msg&#xff09;弹出白色底框(.person-centre)。点击圆头像以外的区域隐藏白色底框 html代码 <div class"per_c"><div class"person-msg pull-right"><i…

几种常用的函数

range()函数: range(起始位置,终止位置,步长)  next()函数: __next__是迭代器方法变量.__next__() 带双下火线的魔术发那个方法 一般情况下不直接使用next(变量)带双下划线的所有方法都可能和内置函数有千丝万缕的联系iter()函数: 可迭代的迭代器 可迭代的.__iter__()迭代器…

java sql server连接字符串_关于Java:SQL Server的等效jdbc连接字符串

我目前正在使用以下连接字符串连接到数据库(该数据库与ServerIP在同一服务器上)&#xff1a;String constr "Data SourceServerIP,1433;Network LibraryDBMSSOCN;InitialCatalogdbName;User IDdbUserID;PassworddbUserPassword";在asp.net中使用时&#xff0c;此连接…

上传图片或文件 方法一

最近在巩固一些知识点&#xff0c;回过头看之前做过的项目&#xff0c;所以就在这里总结一下 话不多说&#xff0c;直接看源码 前端 publish-menu.jsp 1 <form action"PublishMenu" method"post" enctype"multipart/form-data" > 2 3 …

如何在Ubuntu上轻松安装Oracle Java

Ubuntu上的开发人员习惯于至少看到两种Java风格。 OpenJDK是Java运行时和编译器的开源构建。 Oracle JDK以此为基础&#xff0c;但是增加了一些封闭源组件。 从理论上讲&#xff0c;OpenJDK是Java 7的官方参考实现 &#xff0c;并且完全可以满足您的所有需求。 在实践中&#…

今天发现新大陆:haml和Emmet

其实一开始小渣渣我只是想接触一下&#xff08;css预处理器&#xff09;sass&#xff0c;可是突然冒出一个haml。 原文是酱紫的。 Sass 是采用 Ruby 语言编写的一款 CSS 预处理语言&#xff0c;它诞生于2007年&#xff0c;是最大的成熟的 CSS 预处理语言。最初它是为了配合 H…

Docker系列(五):.Net Core实现k8s健康探测机制

k8s通过liveness来探测微服务的存活性&#xff0c;判断什么时候该重启容器实现自愈。比如访问 Web 服务器时显示 500 内部错误&#xff0c;可能是系统超载&#xff0c;也可能是资源死锁&#xff0c;此时 httpd 进程并没有异常退出&#xff0c;在这种情况下重启容器可能是最直接…

编写java程序计算梯形面积_学习练习 java面向对象梯形面积

package com.hanqi;public class Ladder {double ShangDi;double XiaDi;double Gao;double MianJi;Ladder(double ShangDi, double XiaDi, double Gao){//使用参数来初始化属性//this 代表当前类this.ShangDi ShangDi;this.XiaDi XiaDi;this.Gao Gao;}//方法的命名&#xff…

02-再探MySQL数据库

一、数据类型 1、数值类型 a、整数类型 整数类型&#xff1a;TINYINT SMALLINT MEDIUMINT INT BIGINT 作用&#xff1a;存储年龄&#xff0c;等级&#xff0c;id&#xff0c;各种号码等。 tinyint[(m)] [unsigned] [zerofill]小整数&#xff0c;数据类型用于保存一些范围的整数…

如何在WebLogic Server中创建MySQL数据源

使用应用程序服务器的一个很酷的事情是&#xff0c;它允许您在应用程序外部创建DataSource&#xff0c;并且可以与线程池和事务管理器等一起管理它。对于WebLogic Server&#xff0c;它附带了许多内置的JDBC驱动程序&#xff0c;例如Oracle数据库和MySQL等随时可用。 在这里&am…

js原生带缩略图的图片切换效果

js原生带缩略图的图片切换效果 本例中用到的 moveElement(elementID,final_x,final_y,interval)是来自《JavaScript DOM编程艺术&#xff08;中文第二版&#xff09;》一书第10章中有一段代码。&#xff08;可以直接baidu&#xff09; 左边是banner图&#xff0c;右边是缩略图…

linux 基础10-磁盘配额管理

1. 基本概念 1.1 概念&#xff1a; 在linux系统中&#xff0c;由于是多人多任务的使用环境&#xff0c;所以会有多人共同使用一个硬盘空间的情况&#xff0c;如果其中少数几个人大量使用了硬盘空间的话&#xff0c;势必会压缩其他使用者的使用空间&#xff0c;因此管理员应该适…

java 全半角转换_Java 全半角转换

* 全角转半角的 转换函数* return String*/public static final String full2HalfChange(String QJstr){StringBuffer outStrBuf new StringBuffer("");String Tstr "";byte[] b null;for (int i 0; i < QJstr.length(); i) {Tstr QJstr.substring…

第九章:内存管理

内存管理 引用计数&#xff1a;垃圾回收机制的依据 a.变量的值被引用&#xff0c;该值的引用计数 1b.变量的值被解绑&#xff0c;该值的引用计数 -1c.引用计数为0时就会被垃圾回收机制回收​ 引用计数会出现循环引用问题&#xff1a;相互引用无法释放 a.两个变量引用其值&#…