开发工具分享
  • 首页
  • 计算科学
  • 文化旅游
  • 项目和网站
    • OSSEZ 计算技术
    • USRealEstate 社区
    • 地区文化
    • CWIKI.US
    • BUG.OSSEZ.COM
    • RSS.OSSEZ.COM
Computer Science
Computer Science

Java 如何在 Array 和 List 之间进行转换

概述 在本文章中,我们对如何在 Java 中对 Array 和 List 进行转换进行一些说明和示例。 这些示例通过使用 Core Java 和一些第三方的转换工具,例如 Guava 和 Apache Commons Collections。 更多有关的文章,请访问:Java - OSSEZ 相关的内容和参与讨论。 从 List 转换为 Array 使用原生 Java 代码 我们可以使用原生 Java 代码来进行转换,在 List 中有一个 toArray 的方法,直接使用就可以了。 @Test public final void givenUsingCoreJava_whenListConvertedToArray_thenCorrect() { final List<Integer> sourceList = Arrays.asList(0, 1, 2, 3, 4, 5); final Integer[] targetArray = sourceList.toArray(new Integer[0]); } 需要注意的是,我们在这里使用了 toArray(new T[0]) 来对变量进行初始化,相对使用 toArray(new T[size]) 这个方法。 使用 toArray(new T[0]) 来对数组进行初始化更加安全,快速,易读。 使用 Guava 让我们来使用 Guava API 来进行相同的转换: @Test public final void givenUsingGuava_whenListConvertedToArray_thenCorrect() { final List<Integer> sourceList = Lists.newArrayList(0, 1, 2, 3, 4, 5); final int[] targetArray = Ints.toArray(sourceList); } Ints 中有一个 toArray 的方法,这个方法将会把整数类型的 List 转换为 Array。 把 Array 转换为 List 使用原生 Java 让我们使用原生的 Java 来把数组转换为 List。 直接只用 JDK 中的 Arrays 来进行转换就可以了。 @Test public void givenUsingCoreJava_whenArrayConvertedToList_thenCorrect() { Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 }; List<Integer> targetList = Arrays.asList(sourceArray); } 需要注意的是,这个方法转换的 List 是固定长度的 List,你就没有办法对这个 List 进行相关操作了。 如果你是希望使用基本的 ArrayList 的话,我们可以简单的使用 ArrayList 来对其进行实例化。 如下面的代码来进行实例化: List<Integer> targetList = new ArrayList<Integer>(Arrays.asList(sourceArray)); 使用 Guava 让我们来使用 Guava API 来进行相同的转换: @Test public void givenUsingGuava_whenArrayConvertedToList_thenCorrect() { Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 }; List<Integer> targetList = Lists.newArrayList(sourceArray); } 使用 Commons 集合 最后,我们来看看如何使用 Apache Commons Collections 的 CollectionUtils.addAll API 来把 Array 的内容填充到一个空的 List: @Test public void givenUsingCommonsCollections_whenArrayConvertedToList_thenCorrect() { Integer[] sourceArray = { 0, 1, 2, 3, 4, 5 }; List<Integer> targetList = new ArrayList<>(6); CollectionUtils.addAll(targetList, sourceArray); } 这个方法,我们使用的是 CollectionUtils 的工具类来进行添加的。 结论 在 Java 的集合类型直接进行转换是我们需要经常进行操作的方法和需求。 上面介绍了几种基本的转换方法,根据我们的实际使用经验,使用 Guava 的 Lists 来把 Array 转换为 List 是我们常用的方法。并且创建的 List 也是可变的。     使用 Commons Collections 的这个方法是通过 Add 的方法的,感觉这个方法也比较简单,但是用得有点晦涩。   https://www.ossez.com/t/java-array-list/14416

2023年05月10日 0Comments 545Browse 0Like Read more
Computer Science

都 2023 了,还在用 CentOS 吗

自 1994 年面世以来,红帽 Linux 已经陪伴开发者们走过了将近 30 年的旅程。2014 年红帽吸纳了 CentOS 社区主要成员包括当时的项目领导者、核心项目贡献者。Red Hat 和 CentOS 项目联手,目的是开发用于企业 IT 的下一代 Linux 创新技术。这些年,我们看到开源模型继续蓬勃发展,推动了 Linux 容器、Kubernetes、微服务、无服务器等的兴起。 鉴于社区推动的创新步伐迅速,社区领导层在 2019 年决定向 CentOS Linux 社区引入一个新模式:CentOS Stream,将社区工作转向上游。CentOS Stream 是一个面向开发者的发行版,旨在帮助社区成员、红帽合作伙伴和其他人在更稳定和可预测的 Linux 生态系统中充分利用开源创新。 对最终用户影响最大的是 CentOS Linux 7 和 8 逐渐停止维护和更新。 CentOS操作系统 在众多的操作系统中,CentOS无疑是一个广泛被认知和被选择的操作系统,这和CentOS自身的特性以及国内运维团队发展有着不可分割的关系。 在国内互联网IT技术发展的初期,更轻量级的开发语言与中间件开始逐渐被IT人员选择,所以更适合运行这种环境的Linux操作系统被大家广泛用于服务端操作系统,在那个时期,国内的运维团队基本以Redhat为主,Redhat作为针对企业应用的Linux为了将性能最大化留给应用系统,基本是基于命令行进行管理,同时当时构建网站主流的apache、mysql等都有基于Redhat的优化版本。 在Redhat逐渐转向订阅级别的企业级操作系统后,Redhat Linux也从开源分化为面向企业的收费版本Redhat以及面向社区的免费版本Fedora。很多Redhat用户仍希望能免费使用曾经开源、稳定并带有支持的Redhat Linux,在这个背景下就诞生了CentOS。 Gregory Kurtzer创建了CentOS项目(全名是Community EnterpriseOperating System),CentOS项目的目标是在红帽不再提供免费的技术支持和产品后对红帽的重构,基于红帽的源代码对RHEL进行翻版,在重新编译的过程中去仅去除了RHEL源代码中红帽的LOGO、商标或者其他会可能会造成商业纠纷的部分并替换了主题。由于Redhat的知名度以及CentOS对自己发行版清晰的定位,所以CentOS一经发布就被众多红帽用户追捧。CentOS是一个完全非盈利性质的开源项目,而开源软件诞生的初衷之一是让那些用不起昂贵商业软件的人可以用上免费或者廉价的替代品,CentOS同时具备Redhat的稳定性以及免费特性,这也是CentOS在国内拥有大量用户的重要原因。 在2014年,CentOS宣布加入红帽,红帽出资对CentOS项目进行赞助,出人直接参与CentOS项目的开发,并占据了CentOS社区当时9个常任董事中3个名额。 CentOS加入红帽后完善了红帽的整个开源生态系统,最大的好处就是红帽所有产品对应的社区发行版本有一个比Fedora更理想的体验和开发平台,形成了完整的有一一对应关系的企业开源产品和社区开源产品。 Centos停止维护消息 2020年12月08日,CentOS官方宣布了停止维护CentOS Linux 8的计划,并推出了CentOS Stream项目。具体信息,请阅读CentOS官方公告。其具体规划如下: CentOS Linux 8作为RHEL 8的复刻版本,生命周期缩短,于2021年12月31日停止更新并停止维护(EOL)。 基于以上官方变更计划,CentOS Linux 8用户将无法获得包括问题修复和功能更新在内的任何软件维护和支持。CentOS官方建议停止维护后:对于开发或测试环境,可以将环境迁移至CentOS Stream版本; 对于生产环境或部署关键业务的系统,建议使用稳定的Red Hat Enterprise Linux。对此,用户需评估以下问题: CentOS Stream是一个滚动发行的版本,仅为RHEL前置测试版,运用于生产环境时,可能存在一定风险。     要不要升级 回答是要。 我们最近在部署 syslog-ng 的时候,发现 CentOS 因为停止更新了,所以 CA 证书也没有办法更新了。 本来我们本着就是能用就不升级的态度来做的,但是在遇到 CA 证书失败的情况下升级就是唯一的选择了。 停止更新后会造成更多的安全隐患,对部署在生产环境下使用的服务器是不利的。   https://www.ossez.com/t/2023-centos/14415

2023年05月06日 0Comments 550Browse 0Like Read more
Computer Science

Harbor Freight 去买个轮胎撬棍

Harbor Freight 这家店有点意思。 这家店感觉主要是卖工具的,但是和 Home depot 又没有那么全。     因割草机的轮胎已经坏掉了,需要买个撬棍换个轮胎什么的。 结果找来找去都没有找到需要的,反而在这家店里面发现了不少宝藏的好东西。 店不大,但是如果你是搞修理,修修车什么的,这里面的东西就比 Home Depot 要全一些。   https://www.isharkfly.com/t/harbor-freight/433

2023年05月06日 0Comments 603Browse 0Like Read more
Computer Science

Syslog-ng RHEL 的安装和配置

syslog-ng 作为 syslog 的替代工具,可以完全替代 syslog 的服务,并且通过定义规则,实现更好的过滤功能。 作为运维来说一个好的日志工具比什么都重要。 通常我们会管理不同的服务器,因此我们需要把日志集中一下以便于快速查找。 这个时候就需要在每个服务器上部署一个日志收集工具了 syslog-ng 是你的不二选择。 RHEL 安装 因为 CentOS 已经不再提供更新和支持了,所以我们可能会安装 RHEL 或者 Fedora 的版本。 在控制台上运行: dnf install syslog-ng 就可以进行安装了。     配置日志收集 配置的日志收集文件位置为: nano /etc/syslog-ng/conf.d/ldp.conf 上面是我们配置的一个日志收集配置文件。 我们把日志发布到远程服务器上了     远程查看 如果配置正确,运行下面的命令来启动日志收集服务器 systemctl restart syslog-ng 开机自动启动,运行命令: systemctl enable syslog-ng 能确保开机能够自动启动。   检查日志服务器,我们可以从日志服务器上看到上传的的日志信息。     https://www.ossez.com/t/syslog-ng-rhel/14408/2

2023年05月05日 0Comments 601Browse 0Like Read more
Computer Science

暑假回国的机票,真是一天一个价

每天在刷机票的时候都会看到这价格是每天一个价。   https://www.isharkfly.com/t/topic/324/1

2023年04月28日 0Comments 784Browse 0Like Read more
Computer Science

日本签证可以代办吗

第一次去 Boston 办日本签证的时候,因为资料不全没有办成。 但是问了是否可以代办,领事馆的工作人员说是可以的。 需要代办人填一个下面的表 领事馆工作人员给了一个下面的表。     如果你需要代办的话,你需要填好上面的表格,然后交给你的朋友或者家人就好了。 日本领事馆是可以代办的。 https://www.isharkfly.com/t/topic/323

2023年04月28日 0Comments 1032Browse 1Like Read more
Computer Science

JetBrains 的开源许可证是可以申请的

如果你是积极的开源贡献者,并且 GitHub 上有你自己维护的项目。 并且你的项目还有点流量的话,你是可以申请 JetBrains 的开源许可证的。     JetBrains 对开源社区还是比较包容的,只要项目是在正常维护,通常他们都会签发一年的许可证给你。   https://www.ossez.com/t/jetbrains/14402

2023年04月28日 0Comments 748Browse 0Like Read more
Computer Science

微信用户分析的返回数据

微信 API 中,针对用户数据统计可以获得用户增减数据,同时还可以获得用户累计数据。 分别是 2 个 API ,但是返回是下面 2 个对象。   2023-04-24_11-58-061024×758 35.9 KB   用户分析微信官方的 API 文档链接地址为:微信开放文档 其中一个 API 的返回的字符串。 { "list": [ { "ref_date": "2023-04-20", "user_source": 0, "new_user": 0, "cancel_user": 0 }, { "ref_date": "2023-04-21", "user_source": 0, "new_user": 0, "cancel_user": 0 }, { "ref_date": "2023-04-22", "user_source": 0, "new_user": 0, "cancel_user": 0 }, { "ref_date": "2023-04-23", "user_source": 0, "new_user": 0, "cancel_user": 0 } ] } 微信数据统计的问题 在微信数据统计的时候,如果你的请求日期是当天的话,API 会提示数据错误。 这是因为微信的数据统计不能提供当前的数据。 你将看到下面的错误提示: {"errcode":61501,"errmsg":"date range error rid: 6446a7e2-6382ec81-1f9d72d2"}     出现这个提示的原因是你的查询数据日期不正确,微信没有办法正确的返回数据。   https://www.ossez.com/t/topic/14398

2023年04月25日 0Comments 777Browse 0Like Read more
Computer Science

Retrofit 在 JSON 反序列化的时候提示 UnrecognizedPropertyException 异常

提示的异常信息如下: java.lang.RuntimeException: com.fasterxml.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized field "new_user" (class com.ossez.wechat.common.model.res.UserSummaryResponse$UserData), not marked as ignorable (5 known properties: "cancel_user", "new_users", "ref_date", "user_source", "cumulate_user"]) at [Source: (okhttp3.ResponseBody$BomAwareReader); line: 1, column: 63] (through reference chain: com.ossez.wechat.common.model.res.UserSummaryResponse["list"]->java.util.ArrayList[0]->com.ossez.wechat.common.model.res.UserSummaryResponse$UserData["new_user"]) at io.reactivex.internal.util.ExceptionHelper.wrapOrThrow(ExceptionHelper.java:46) at io.reactivex.internal.observers.BlockingMultiObserver.blockingGet(BlockingMultiObserver.java:93)     问题和解决 这是因为 retrofit 在反序列化的时候,如果没有找到对应的对象名,将会报错。 关键是在下面这句话: .addConverterFactory(JacksonConverterFactory.create())     需要做的也非常简单,只需要将上面的 Jackson 的 mapper 对象映射过来就可以了。     在 ObjectMapper 对象中,我们可以定义是不是忽略没有找到的字段。 就是下面这句话: mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); 这样我们就不会因为没有找到字段而出现异常的问题了。   https://www.ossez.com/t/retrofit-json-unrecognizedpropertyexception/14399

2023年04月25日 0Comments 781Browse 0Like Read more
Computer Science

TestNG 中使用 Guice 来进行依赖注入

Guice是Google开发的一个轻量级,基于Java5(主要运用泛型与注释特性)的依赖注入框架(IOC)。 Guice非常小而且快。Guice是类型安全的,它能够对构造函数,属性,方法(包含任意个参数的任意方法,而不仅仅是setter方法)进行注入。 Guice采用Java加注解的方式进行托管对象的配置,充分利用IDE编译器的类型安全检查功能和自动重构功能,使得配置的更改也是类型安全的。 Guice提供模块对应的抽象module,使得架构和设计的模块概念产物与代码中的module类一一对应,更加便利的组织和梳理模块依赖关系,利于整体应用内部的依赖关系维护,而其他IOC框架是没有对应物的。 此外,借助privateModule的功能,可以实现模块接口的明确导出和实现封装,使得支持多数据源这类需求实现起来异常简单。 定义一个 Guice Module 这个 Guice Model 会实现 Module 接口。   2023-04-23_15-32-551123×764 92.8 KB   然后对需要注入的类进行绑定。 绑定的语句在这里: binder.bind(TestConfigStorage.class).toInstance(config); binder.bind(WeChatOfficialAccountService.class).toInstance(weChatOfficialAccountService); binder.bind(WeChatMsgService.class).toInstance(weChatMsgService); 测试中使用 因为我们需要在测试中使用,所以我们会使用 testNG 的 Guice 注解。   2023-04-23_15-34-45825×442 33 KB   使用下面的语句直接注入到模块中。 然后把需要的服务,注入进来就可以了。 @Inject protected WeChatOfficialAccountService wxService; 是不是非常简单。   2023-04-23_15-34-45825×442 33 KB   相对 Junit 测试框架来说,TestNG 使用 Guice 更加方便。 如何在 Junit 中使用 Guice ,请参考文章:Junit 5 如何使用 Guice DI 中的内容。 https://www.ossez.com/t/testng-guice/14396  

2023年04月24日 0Comments 1550Browse 0Like Read more
1…4950515253…237
Archives
  • June 2026
  • May 2026
  • April 2026
  • March 2026
  • February 2026
  • January 2026
  • December 2025
  • November 2025
  • October 2025
  • September 2025
  • August 2025
  • July 2025
  • June 2025
  • May 2025
  • April 2025
  • March 2025
  • February 2025
  • January 2025
  • December 2024
  • November 2024
  • October 2024
  • September 2024
  • August 2024
  • July 2024
  • June 2024
  • May 2024
  • April 2024
  • March 2024
  • February 2024
  • January 2024
  • December 2023
  • November 2023
  • October 2023
  • September 2023
  • August 2023
  • July 2023
  • June 2023
  • May 2023
  • April 2023
  • December 2022
  • November 2022
  • October 2022
  • September 2022
  • August 2022
  • May 2022
  • April 2022
  • March 2022
  • February 2022
  • January 2022
  • December 2021
  • November 2021
  • October 2021
  • September 2021
  • August 2021
  • July 2021
  • June 2021
  • May 2021
  • April 2021
  • March 2021
  • February 2021
  • January 2021
  • December 2020
  • November 2020
  • October 2020
  • September 2020
  • August 2020
  • July 2020
  • June 2020
  • May 2020
  • April 2020
  • March 2020
  • February 2020
  • January 2020
  • December 2019
  • November 2019
  • October 2019
  • September 2019
  • August 2019
  • July 2019
  • June 2019
  • May 2019
  • April 2019
  • March 2019
  • February 2019
  • January 2019
  • December 2018
  • November 2018
  • October 2018
  • September 2018
  • August 2018
  • July 2018
  • June 2018
  • May 2018
  • April 2018
  • March 2018
Categories
  • Computer Science (2,367)
    • Confluence (663)
    • Gradle (12)
  • U.S. (513)
  • 文化旅游 (146)

COPYRIGHT © 2020 CWIKIUS. ALL RIGHTS RESERVED.

THEME KRATOS MADE BY VTROIS

湘ICP备2020018253号-1