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

大家好,这是我在该博客上发表的有关Java 9功能的第一篇文章,今天您将了解我最喜欢的功能“收集的工厂方法” ,它是JEP 269的一部分。JEP代表JDK增强建议。 如果您曾经在Groovy或Kotlin工作过,那么您就会知道使用集合文字使用元素创建列表很容易,例如创建1、2、3的列表,您只需编写val items = listOf(1, 2, 3) 。 不幸的是,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

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

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

相关文章

郴州郴锦机器人_减税降费宣传走进郴州市民营企业高质量发展专题培训班

红网时刻郴州8月23日讯(通讯员 陈磊 记者 欧群军)“毫不动摇支持民营经济健康发展离不开税收政策的有力支持。近年来&#xff0c;特别是今年以来国家系列税收优惠政策的出台&#xff0c;为民营经济的发展注入了新的活力。”8月22日&#xff0c;郴州市税务局减税降费宣讲课堂走进…

FPGA(8)--频率计检测控制系统

文章目录一、设计要求1.整体控制系统设计要求2.频率计检测设计要求二、设计思路1.确定VHDL描述与原理图相结合完成设计2.确定状态情况3.数码管显示功能三、设计内容1. 频率检测部分VHDL描述2. 七段数码管显示部分VHDL描述3. 系统主控制部分VHDL描述4.将三个部分的VHDL描述分别都…

lda进行图片分类_LDA主题模型

今天来啃硬骨头了&#xff0c;说说LDA主题模型。本文言简意赅&#xff0c;没有太多的数学公式。学习也不要太多的陷入算法的细枝末节之中&#xff0c;学习复杂的事物&#xff0c;需要从整体去把握。先列出本文的讲解顺序。什么是LDA模型2. 函数与 Beta函数3.共轭先验分布4.二项…

FPGA(1)--VHDL--6选1数据选择器

一、实验目的 掌握用VHDL语句进行组合电路设计的方法&#xff0c;并熟悉程序的编译、调试与波形图的仿真。 二、实验内容 分别用VHDL的CASE语句及IF语句两种方法&#xff0c;设计6选1数据选择器。通过编译、仿真验证功能正确性。 三、实验设计 设计的依据&#xff1a;教材…

android+4.4+jni闪退,native2.1 安卓退到后台时,概率闪退

赞同来自:同样的&#xff0c;在这个时候&#xff0c;还出了另一个错误&#xff0c;详情见下面的log,这个问题&#xff0c;出现的情况就和上面的不同&#xff0c;从5.0 - 9.0 &#xff0c;level 22- level 28 &#xff0c;都在出这个错误&#xff0c;真的搞不太清楚是为什么&…

java 模板方法设计模式_Java中的模板方法设计模式

java 模板方法设计模式模板方法是一种行为设计模式 &#xff0c;用于创建方法存根并将某些实现步骤推迟到子类。 模板方法定义了执行算法的步骤&#xff0c;它可以提供默认实现&#xff0c;该实现对于所有或某些子类可能是通用的。 让我们通过一个例子来理解这种模式&#xff…

FPGA(2)--例化语句--1位全加器

文章目录一、实验目的二、实验内容三、实验设计四、实验结果及仿真一、实验目的 熟悉元件封装方法&#xff0c;掌握层次化电路设计方法&#xff1b;掌握VHDL例化语句的设计方法。 二、实验内容 1.用VHDL语言设计1位全加器&#xff0c;其中仅就半加器实体进行例化声明及端口映…

对mysql的总结与反思_一次DB故障引起的反思和MySQL Operator选型

前言在一次数据库故障后&#xff0c;我们发现业务库会根据业务的等级会划分多个 MySQL 实例&#xff0c;许多业务库会同时属于一个 MySQL 实例&#xff0c;当一个库引发问题后整个实例的状态是不可控的。从而导致这个实例上的所有业务不稳定甚至造成中断。故障反思微服务架构微…

android 三星 拍照,安卓里面拍照最好的三个品牌,OPPO华为三星怎么选

原标题&#xff1a;安卓里面拍照最好的三个品牌&#xff0c;OPPO华为三星怎么选几乎每一个节日都能被国内的商家抓住并且成功的策划为一次次的「购物节」&#xff0c;双十一、双十二等无一例外&#xff0c;3月7日这个从中国高校里衍生出来的「女生」节如今也成为了「女神节」。…

FPGA(3)--VHDL及原理图--4位全加器

文章目录一、实验目的二、实验内容三、实验设计五、实验思考与总结一、实验目的 掌握例化语句的使用方法&#xff0c;掌握使用程序文本和原理图结合方法设计电路&#xff0c;掌握利用包含算术操作符的重载函数的使用。 二、实验内容 首先用VHDL语言设计1位全加器&#xff0c…

Vertx编程风格:您的反应式Web Companion REST API解释了

Vertx提供了许多在轻量级环境中进行编程的选项&#xff0c;例如node.js。 但是&#xff0c;对于新用户来说&#xff0c;选择采用哪种方法来创建REST API几乎不会造成混淆。 在vertx中编程时可以采用不同的模型。 下面通过易于理解的图表对其进行说明。 PS – vertx编程的核心…

过去式加ed的发音_小学英语动词过去式归类总结

小学英语动词过去式归类总结  一、动词过去式的规则变化 1. 一般情况下&#xff0c;动词词尾加-ed 如&#xff1a;work ---worked, play---played, want----wanted, act----acted 2. 以不发音的 -e 结尾动词&#xff0c;动词词尾加 -d 把动词原形最后的e去掉&#xff0…

FPGA(4)--VHDL--4位D触发器

一、实验目的 掌握利用VHDL语言&#xff0c;进行基本时序元件的设计。 二、实验内容 利用VHDL语言设计含异步复位&#xff08;RST&#xff09;及使能端&#xff08;EN&#xff09;的4位D触发器&#xff0c;其中输入D及输出Q均为4位&#xff08;STD_LOGIC_VECTOR&#xff09;…

鸿蒙10 5G手机,继鸿蒙后麒麟V10问世 5G时代国产操作系统将起飞

(记者 陈洲)从工信部获悉&#xff0c;中国电子近日在广州发布了银河麒麟操作系统 V10。该系统打通了手机、平板、PC 等多个终端&#xff0c;可谓为5G时代量身定做。其独创的 kydroid 技术&#xff0c;可将安卓应用无缝迁移到国产平台上。银河麒麟V10是继华为鸿蒙OS后&#xff0…

模糊查询关键字不区分大小写_SQL简单查询

SQL书写规则&#xff1a;1)以英文分号结尾(;) eg. select 姓名,性别 from student&#xff1b;2)不区分关键字的大小写。就像Excel里面sum可以大写可以小写。同理&#xff0c;SQL中select不区分大小写。3)列名不能加单引号&#xff0c;列名中间不能有空格。4)所有符号都要是英文…

FPGA(5)--VHDL--10十进制计数器及7段显示译码器

前些天发现了一个巨牛的人工智能学习电子书&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;无广告&#xff0c;忍不住分享一下给大家。&#xff08;点击跳转人工智能学习资料&#xff09; 一、实验目的 掌握一般性计数器的VHDL设计方法&#xff0c;熟悉程序文本和原理图…

鸿蒙系统笔记本产业链,华为P40或用鸿蒙 华为产业链概念股一览

众所周知&#xff0c;华为已经推出了全新的鸿蒙系统&#xff0c;这正式证明了华为越挫越勇的精神&#xff0c;余承东已经对外透露&#xff0c;要是在无法使用谷歌服务的情况下&#xff0c;明年推出的华为P40或用鸿蒙系统&#xff0c;值得关注的是&#xff0c;这是时候&#xff…

apache log4j_Apache log4j是领先的日志记录框架

apache log4j根据 零周转的调查中&#xff0c; Apache log4j是领先的Java日志记录框架。 这实际上是一个非常有趣的调查。 它显示SLF4J最常用作伐木外墙&#xff0c;占61&#xff05;。 但是&#xff0c;它似乎最常与Apache Log4j一起使用&#xff0c;52&#xff05;的调查参…

FPGA(6)--7段显示译码器的加法计数器

文章目录一、实验目的二、实验内容三、实验设计与结果四、实验思考与小结一、实验目的 在上次加法计数器仿真实验的基础上&#xff0c;掌握端口的引脚配置、实验箱的接线及程序的下载、调试等。 二、实验内容 1.在上次实验的基础上&#xff0c;编译、仿真可以进行0-99加法计…

FPGA(7)--有限状态机--交通灯

一、实验目的 掌握有限状态机的编程和使用方法。 二、实验内容 设计一个十字路口交通灯控制器&#xff0c;东西(b)、南北(a)方向有红灯、黄灯、绿灯&#xff0c;持续时间分别为45、5、40秒&#xff0c;仿真验证其功能。 三、实验设计与结果 1.整体设计思路&#xff1a;根…