java 方法 示例_Java 9示例–收集的工厂方法–创建不可修改的列表,集合和映射...

java 方法 示例

大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能“收集的工厂方法” ,它是JEP 269的一部分。JEP代表JDK增强建议。 如果您曾经在Groovy或Kotlin工作过,那么您就会知道使用集合文字使用元素创建列表是多么容易,例如,创建1,2,3列表,您只需编写val items = listOf(1, 2, 3) 。 不幸的是,Java尚不支持Java,但是JDK 9中的工厂收集方法已经改善了一切,几乎就像那样。 JDK在基本的Collection接口上添加了诸如of()of() 静态工厂方法 ,您可以使用它们来创建项目列表。

尽管Project Jigsaw或Java Module系统是Java 9发行版的主要亮点,但是从开发的角度来看,还有其他一些有用的功能更有用,例如流程API附魔,Stream API增强以及Optional类的一些有用方法,但是我最喜欢的API更改是Collection的工厂方法。

就像在Kotlin , Scala或Groovy中一样,它使您可以在一行中创建值的列表,集合和值的映射:

List<String> list = List.of("Java", "Kotlin", "Groovy");

但是,唯一要注意的是,您可以创建不可修改或不可变的 List,Set或Map。

of()静态工厂方法返回的List,Set或Map在结构上是不可变的,这意味着一旦添加,就不能添加,删除或更改元素。

调用任何mutator方法都将始终引发UnsupportedOperationException 。 但是,如果所包含的元素本身是可变的,则可能导致Collection的行为不一致或它的内容似乎发生变化。

这与您在JDK 6或7中创建的不可修改列表相同,如下所示:

List<String> listOfString = new List<>();
listOfString.add("Java");
listOfString.add("Kotlin");
listOfString.add("Groovy");
listOfString.add("Scala");
listOfString = Collections.unmodifiableList(listOfString);

unmodifiableList()方法返回的列表也不支持添加,删除或设置操作,如果调用它们,则抛出UnsupportedOperationException

两种代码之间的唯一区别是,更早的代码需要6行以上的代码才能创建不可变的Collection,例如不可变的List,Set或Map,但是现在您只需一行即可。

List接口上还有List.of()多个重载版本,例如,允许您创建1到10个元素的不可变列表,以及允许您创建任意数量的元素列表的可变参数方法 。

Set.of( )和Map.of()方法也是如此。 这是在Java 9中创建不可变Set的示例:

Set<Integer> primes = Set.of(2,3,5,7);

您会看到仅一行就可以创建一个不可变的Set。 同样,要创建不可变Map,JDK 9提供了两种方法Map.of(K k1, V v1)Map.ofEntries()通过使用这两种方法,您可以创建不可变条目的Map,例如

此方法已重载以创建最多10个键值对的映射,但是如果您需要更大的映射和更多映射,则应使用Map.ofEntries()方法。

顺便说一句,您知道如何实现此功能吗? 为何以前不可用? 如果查看JDK 9代码或Javadoc,则会发现通过在Java Collection框架的关键接口(例如List,Set和Map)上添加静态工厂方法来实现此功能。

在JDK 8之前这是不可能的,因为在接口上添加方法意味着破坏所有客户端,并且接口上不允许使用静态方法。 在Java 8上,事情发生了变化,在接口上引入了默认 方法和静态方法 ,这为评估JDK API铺平了道路。

我希望将来会有更多类似的约定,使使用JDK API更加容易。

同样,使用这些工厂方法时,适用于使用不同集合的规则也将适用(正如您期望的那样)。 因此,创建Set时不能传递重复元素,因为Set不允许重复

同样,创建Map时不能传递重复键,因为Map不允许重复键。 如果这样做,则将IllegalArgumentException

另外,您不能将null值传递给collection factory方法,如果这样做,请为Java异常NullPointerException做好准备。

这就是如何在Java 9中创建不可变的列表,设置和映射的全部内容。 集合上的静态方法确实使使用Java集合API变得更容易,至少现在它类似于Kotlin或Groovy提供的东西。 JDK 9充满了这样有用的功能,请继续关注此博客上的更多此类文章。

您可能喜欢的其他Java和编程文章

  • Java开发人员在2018年应该学习的10件事
  • 20个Java开发人员必备库
  • Java程序员可以在2018年阅读的20本书
  • 十大Java 9教程和课程–最好的
  • 5个免费的Spring和Spring启动在线学习课程
  • Java和Web开发人员的10个框架
  • 简单的Java 9新功能-概述(免费课程)

感谢您到目前为止阅读本文。 如果您喜欢此Java 9功能,请与您的朋友和同事分享。 如果您有任何问题需要反馈,请留下注释。

翻译自: https://www.javacodegeeks.com/2018/02/java-9-example-factory-methods-collection-creating-unmodifiable-list-set-map.html

java 方法 示例

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

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

相关文章

高一计算机算法教案,高一信息技术第六章“第一节程序设计的基本方法”教案设计...

一、教学目标1&#xff0e;理解算法的概念&#xff1b;2&#xff0e;知道两种算法的描述方法—语言描述法和流程图的区别3&#xff0e;能初步利用算法解决简单的问题。4&#xff0e;培养学生的理论联系实际能力和动手操作能力。二、教学重难点1&#xff0e;重点&#xff1a;算法…

openshift安装_云幸福–如何在几分钟内安装新的OpenShift Container Platform 3.7

openshift安装此安装需要安装Red Hat Middleware产品流&#xff08;预配置的容器选项&#xff09;以及所有其他功能&#xff0c;例如源容器&#xff0c;映像容器和.Net Core容器。自OpenShift容器平台发布以来&#xff0c;我一直希望提供一个简单的方法。 &#xff0c;完全配置…

简单的计算机程序代码,优秀程序员通过简单代码,窥探电脑编程中强大的数组操作功能...

优秀程序员通过简单代码&#xff0c;窥探电脑编程中强大的数组操作功能。编程语言中&#xff0c;数组是一个非常重要的概念&#xff0c;也是一种很常用的类型。本文中通过javascript语言的代码实例&#xff0c;展现编程中数组的魅力。在javascript语言中&#xff0c;数组Array类…

java 示例_功能Java示例 第3部分–不要使用异常来控制流程

java 示例这是称为“ Functional Java by Example”的系列文章的第3部分。 我在本系列的每个部分中开发的示例是某种“提要处理程序”&#xff0c;用于处理文档。 在前面的部分中&#xff0c;我从一些原始代码开始&#xff0c;并应用了一些重构来描述“什么”而不是“如何”。…

win7 计算机定时关机脚本,win7怎么定时关机?win7定时关机设置两种方法

当我们在操作电脑的时候&#xff0c;有时会有需要定时关机&#xff0c;或者不在电脑前操作是需要过段时间自动关机&#xff0c;但是Win7系统没有自带的定时关机软件&#xff0c;很多电脑用户又不喜欢安装第三方软件来完成该操作。那么win7怎么定时关机&#xff1f;本文为大家介…

java面试spring_针对Java程序员的二十大Spring REST面试问题答案

java面试spring大家好&#xff0c;过去两周来&#xff0c;我一直在与Spring教程共享一些REST&#xff0c;今天&#xff0c;我将向申请Web开发人员角色的Java开发人员共享一些常见的Spring和REST采访问题。 由于Spring Framework是用于开发Java Web应用程序和RESTful Web Servic…

springboot jwt token前后端分离_「转」七个开源的 Spring Boot 前后端分离项目,建议收藏加转载...

其实前后端分离本身并不难&#xff0c;后段提供接口&#xff0c;前端做数据展示&#xff0c;关键是这种思想。很多人做惯了前后端不分的开发&#xff0c;在做前后端分离的时候&#xff0c;很容易带进来一些前后端不分时候的开发思路&#xff0c;结果做出来的产品不伦不类&#…

联想办公计算机,办公娱乐两不误!联想这些笔记本电脑不容错过

【PConline 海选导购】随着技术的进步&#xff0c;如今的笔记本电脑性能越来越强&#xff0c;尤其是笔记本电脑携带更加方便&#xff0c;可以让你摆脱使用场景的限制&#xff0c;能随时随地畅玩游戏或者进行日常办公&#xff0c;有着台式机无可比拟的优势&#xff0c;因此&…

ftp主要完成与远程计算机的连接,2015计算机三级《网络技术》复习重点:远程登录服务和FTP服务...

2015计算机三级《网络技术》复习重点&#xff1a;远程登录服务和FTP服务一、远程登录服务(TCP连接)(TCP的23端口服务)1、远程登录协议用户使用Telnet命令&#xff0c;使自己的计算机成为远程计算机的一台仿真终端。远程登录允许任意类型的计算机之间进行通信&#xff0c;具体实…

度量空间的应用_使用Dropwizard度量标准监视和测量无功应用

度量空间的应用在上一篇文章中&#xff0c;我们创建了一个简单的索引代码&#xff0c;该代码可以对ElasticSearch进行数千个并发请求。 监视系统性能的唯一方法是老式的日志记录语句&#xff1a; .window(Duration.ofSeconds(1)) .flatMap(Flux::count) .subscribe(winSize -&…

rust的权限柜怎么做_潍坊装修知识~二胎家庭不做上下铺,把两张床靠墙放,中间做收纳柜,你感觉怎么样?...

如今装修最受关注也最让人头疼的就是儿童房装修了&#xff0c;身边二胎家庭、双胞胎家庭也是越来越多&#xff0c;如果户型小&#xff0c;再面对那只有几十平的小户型&#xff0c;2个孩子无法避免的要挤一间卧室&#xff01;所以对于儿童床的摆放和收纳该如何合理安排呢&#x…

java方法示例注释 @_Java 8中的功能接口是什么? @功能注释和示例

java方法示例注释 函数接口是Java 8最重要的概念之一&#xff0c;实际上为lambda表达式提供了动力&#xff0c;但是许多开发人员没有首先了解函数接口在Java 8中的作用就花了很多精力来理解它&#xff0c;并花时间学习lambda表达式和Stream API。除非您知道什么是功能接口以及l…

sql 除法_七天学会SQL-04SQL复杂查询

一、视图&#xff08;以下SQL操作都在Navicat客户端下操作&#xff09;1、什么是视图&#xff1f;1.是什么&#xff1f; 视图存放sql查询语句&#xff0c;使用视图时&#xff0c;会运行视图里的sql查询语句创造出一张临时表&#xff1b;如需频繁使用一段sql查询语句时可将该查询…

r中rep_Spring中@ Component,@ Service,@ Controller和@Repository之间的区别

r中rep在了解Spring框架中Repository Component &#xff0c; Service Controller &#xff0c; Repository Controller和Repository批注之间的区别之前&#xff0c;了解Component批注在Spring中的作用很重要。 在Spring的初始发行期间&#xff0c;所有bean都用于在XML文件中声…

adf4351使用_使用ADF绑定创建视图对象行CreateInsert操作

adf4351使用在这篇简短的文章中&#xff0c;我将重点介绍与在任务流中创建新记录的一种非常常见的方法有关的一个小陷阱。 让我们考虑一个简单的任务流程示例&#xff0c;该任务流程创建一个新的VO行&#xff0c;如果用户单击“确定”按钮&#xff0c;则在页面片段上显示该行并…

css鼠标移入线条延中心伸长,css动画效果:鼠标移上去底部线条从中间往两边延伸 - 子成君-分享出去,快乐加倍!-旧版已停更...

本站已不再更新,最新资源请前往zcjun.com获取!css&#xff1a;.top-nav a:after {content: ;position: absolute;z-index: 2;bottom: 0;left: 50%;display: block;width: 165px;height: 1px;transform: translate(-50%);}.top-nav a:hover:after {height: 2px;animation: ad_w…

css 深度选择器 ,CSS的coped私有作用域和深度选择器

大家都知道当 编译前&#xff1a;.example {color: red;}编译后&#xff1a;.example[data-v-f3f3eg9] {color: red;}看完你肯定就会明白了&#xff0c;其实是在你写的组件的样式&#xff0c;添加了一个属性而已&#xff0c;这样就实现了所谓的私有作用域。但是也会有弊端&…

营销自动化权威指南_免费电子书:自动化根本原因分析的完整指南

营销自动化权威指南自动化根本原因分析入门指南。 我们在OverOps过夜&#xff0c;梦想着拥有一个自动化的世界。 看起来似乎有些怪异&#xff0c;但是您能想象您和您的团队会比那些不眠之夜和无休止的日子在日志文件中筛选以找出问题出在哪里的快乐多了吗&#xff1f; 这些乏…

光立方原理讲解_90%人不理解什么是防眩光射灯 防昡晕 防炫光,。怎么选项led防眩灯...

关于LED射灯“防眩光(防炫光)”实在想和各位朋友讲解一下防眩光原理 &#xff0c;因为我们碰到90%以上装修朋友&#xff0c;总是把眩光理解为简单的不刺眼的光。我可以负责的告诉大家 &#xff0c;市面上没有不刺眼的射灯&#xff0c;不管是LED芯片直接射出来的光&#xff0c;还…

打印机设置虚拟服务器,虚拟机打印机服务器设置

虚拟机打印机服务器设置 内容精选换一换迁移前&#xff0c;您需要设置目的端服务器。该目的端用来接收源端的数据&#xff0c;同时您也可以使用该目的端进行迁移测试和启动目的端。只有“迁移阶段”为“已就绪”时才可设置目的端。或单击“操作”列的“更多 > 设置目的端”&…