当前位置: 首页 > news >正文

Java中List与数组之间的相互转换

一、List列表与对象数组

List列表中存储对象,如List<Integer>List<String>List<Person>,对象数组中同样存储相应的对象,如Integer[]、String[]、Person[],对象数组与对象List的转换可通过如下方式实现:

(一)对象List转对象数组

1、toArray()方法

直接调用对象List的toArray()方法转换为对象数组,该方法的参数是T[],因此需要传入对应的对象数组构造函数,指定数组的长度,如下所示:

1

2

3

ArrayList<Integer> integersList = new ArrayList<>(Arrays.asList(1,2,3));

// 1、toArray()方法

Integer[] integersArrau = integersList.toArray(new Integer[integersList.size()]);

// 2、toArray()方法,等价于上面的用法,即0会自动替换为size()

Integer[] integersArrau = integersList.toArray(new Integer[0]);

​​​​​​​

2、Stream流的toArray()方法

通过Stream流的toArray()方法,传入参数是对应对象的构造方法的方法引用,使用方式如下所示:

1

2

3

ArrayList<Integer> integersList = new ArrayList<>(Arrays.asList(1,2,3));

// 2、Stream流的toArray()方法

Integer[] integersArray2 = integersList.stream().toArray(Integer[]::new);

这个toArray()方法是Stream类下的,该方法说明如下所示:

/*** Returns an array containing the elements of this stream, using the* provided {@code generator} function to allocate the returned array, as* well as any additional arrays that might be required for a partitioned* execution or for resizing.** <p>This is a <a href="package-summary.html#StreamOps" rel="external nofollow" >terminal* operation</a>.** @apiNote* The generator function takes an integer, which is the size of the* desired array, and produces an array of the desired size.  This can be* concisely expressed with an array constructor reference:* <pre>{@code*     Person[] men = people.stream()*                          .filter(p -> p.getGender() == MALE)*                          .toArray(Person[]::new);* }</pre>** @param <A> the element type of the resulting array* @param generator a function which produces a new array of the desired*                  type and the provided length* @return an array containing the elements in this stream* @throws ArrayStoreException if the runtime type of the array returned* from the array generator is not a supertype of the runtime type of every* element in this stream*/
<A> A[] toArray(IntFunction<A[]> generator);

该方法传入一个函数式接口,该接口对应一个方法引用,作用是创建一个新的指定类型和长度的数组,因此我们传入的参数就是一个Integer[]数组的构造方法的方法引用,最终得到的也就是一个Integer[]数组。

3、for循环

过于简单,不再赘述。

(二)、对象数组转对象List

1、使用Arrays.asList()

该方法通过传入一个对象数组,最后转换为一个对象List,如下所示:

1

2

3

Integer[] integersArray = {1, 2, 3};

// 1、使用Arrays.asList()

List<Integer> integersList = Arrays.asList(integersArray);

asList方法传入的参数是一个可变参数,因此既可以传入多个参数,也可以传入一个数组,如下所示:

/*** Returns a fixed-size list backed by the specified array.  (Changes to* the returned list "write through" to the array.)  This method acts* as bridge between array-based and collection-based APIs, in* combination with {@link Collection#toArray}.  The returned list is* serializable and implements {@link RandomAccess}.** <p>This method also provides a convenient way to create a fixed-size* list initialized to contain several elements:* <pre>*     List&lt;String&gt; stooges = Arrays.asList("Larry", "Moe", "Curly");* </pre>** @param <T> the class of the objects in the array* @param a the array by which the list will be backed* @return a list view of the specified array*/
@SafeVarargs
@SuppressWarnings("varargs")
public static <T> List<T> asList(T... a) {return new ArrayList<>(a);
}

2、使用Collections.addAll()

通过Collections集合类的static方法将一个对象数组转换为对象List,注意首先要创建出一个对象List,使用方式如下所示:

1

2

3

4

Integer[] integersArray = {1, 2, 3};

// 2、使用Collections.addAll()

ArrayList<Integer> integersList2 = new ArrayList<>();

Collections.addAll(integersList2,integersArray);

3、使用Stream中的Collector

JDK8之后可以使用Stream流来执行转换操作,通过Stream流的终结操作collect来指定将要转换得到的List:

1

2

3

Integer[] integersArray = {1, 2, 3};

// 3、使用Stream中的Collector

List<Integer> integersList3 = Arrays.stream(integersArray).collect(Collectors.toList());

4、for循环

过于简单,不再赘述。

二、List列表与基本数据类型数组

上面我们介绍了对象List列表与对象数组之间的转换,但是有些情况需要直接将对象List转换为基本数据类型数组,如List<Integer>int[]这种情况,下面详细介绍。

(一)、对象List转基本数据类型数组

1、Stream流执行转换

通过Stream流执行转换,如List<Integer>转换为int[],通过Stream流的mapToInt()可将每个Integer转换为int,再输出为int数组,如下所示:

1

2

3

4

5

6

ArrayList<Integer> integersList = new ArrayList<>(Arrays.asList(1,2,3));

// 1、Stream流执行转换

// 方法引用

int[] arrays1 = integersList.stream().mapToInt(Integer::intValue).toArray();  //需要先用mapToInt进行转换

// 2、 lambda表达式

int[] arrays2 = integersList.stream().mapToInt(i -> i).toArray();

2、for循环

过于简单,不再赘述。

(二)、基本数据类型数组转对象List

1、Stream流转换

以int[]数组来举例,通过Stream流的mapToObj()方法先将int[]数组中每个int值转换为Integer包装类,再通过collect执行终结操作转换为Integer的List。

int[] integersArray = {1, 2, 3};
// 1、Stream流转换, 需要先用mapToObj进行转换
List<Integer> integersList = Arrays.stream(integersArray).mapToObj(Integer::new).collect(Collectors.toList());

2、for循环

for循环是最简单、好用的方式,不再赘述。

注意,二维数组中的 list.toArray(array) 方法不能用于一维的 int[] 中。

因为 toArray() 方法的参数是范型对象,而 int 是标准数据类型。可以用 Interger[]来实现

相关文章:

Java中List与数组之间的相互转换

一、List列表与对象数组 List列表中存储对象&#xff0c;如List<Integer>、List<String>、List<Person>&#xff0c;对象数组中同样存储相应的对象&#xff0c;如Integer[]、String[]、Person[]&#xff0c;对象数组与对象List的转换可通过如下方式实现&…...

嵌入式_GD32看门狗配置

嵌入式_GD32独立看门狗配置与注意事项 文章目录 嵌入式_GD32独立看门狗配置与注意事项前言一、什么是独立看门狗定时器&#xff08;FWDGT&#xff09;二、独立看门狗定时器原理三、独立看门狗定时器配置过程与注意事项总结 前言 使用GD3单片机时&#xff0c;为了提供了更高的安…...

Python 中的 JSON 操作:简单、高效的数据交换格式

在现代的数据交换和存储中&#xff0c;JSON&#xff08;JavaScript Object Notation&#xff09;作为一种轻量级的数据交换格式&#xff0c;备受青睐。它不仅易于阅读和理解&#xff0c;还可以灵活地表达和存储高维数据。本文将介绍如何在 Python 中操作 JSON 文件&#xff0c;…...

IT行业面试攻略:技巧与心态的平衡

引言&#xff1a;在面试IT公司时&#xff0c;调整好心态是取得优秀表现的关键。面试心态直接影响着我们在面试中的自信程度和表现。面对这一挑战&#xff0c;我们需要学会积极自信、认识到紧张是正常的、进行充分准备以及以积极的心态去迎接面试。只有在拥有正确的心态下&#…...

【玩转Linux】标准io缓冲区的操作

(꒪ꇴ꒪ ),hello我是祐言博客主页&#xff1a;C语言基础,Linux基础,软件配置领域博主&#x1f30d;快上&#x1f698;&#xff0c;一起学习&#xff01;送给读者的一句鸡汤&#x1f914;&#xff1a;集中起来的意志可以击穿顽石!作者水平很有限&#xff0c;如果发现错误&#x…...

28.JavaWeb-Elasticsearch

1.Elasticsearch概述 Elasticsearch 是一个分布式的全文检索引擎。采用Java语言开发&#xff0c;基于Apache协议的开源项目&#xff0c;具有实时搜索&#xff0c;稳定&#xff0c;可靠&#xff0c;快速的特点。 1.1 全文检索引擎 分为通用搜索引擎&#xff08;百度、谷歌&…...

Python Flask构建微信小程序订餐系统 (十)

🔥 编辑会员信息 🔥 编辑会员信息可以通过点击会员列表操作,也可以点击会员信息详情点击进行操作 🔥 修改编程会员信息列表布局 🔥 修改 web/templates/member/index.html 文件,添加跳转到编辑会员信息的页面 web/templates/member/set.html 🔥 创建用于会员…...

j2ee相关知识点

浏览器栏中&#xff0c;输入的是servlet的mapping映射&#xff0c;请求到servlet中去&#xff0c;jsp路径&#xff0c;会跳转到对应的页面 Servlet接口位于最顶端&#xff0c;GenericServlet实现了Servlet&#xff0c;HttpServlet继承了GenericServlet 浏览器中访问Servlet映…...

Shell脚本学习-eval内置命令

这个命令&#xff0c;平时接触不是很多&#xff0c;所以不知道是什么回事。 eval内置命令&#xff1a; 功能&#xff1a;当Shell程序执行到eval语句的时候&#xff0c;Shell读入参数args&#xff0c;并将它们组合成一个新的命令&#xff0c;然后执行。也就是重新运算求出参数的…...

word中将合并后的多行拆分为原先的行数

word中将已经合并的多行拆分为原先的行数&#xff0c;我们不用刻意去数应该是多少行&#xff0c; 只需将拆分的行数不断增加&#xff0c;word会默认最大增加到合并前的行数。...

网络知识点之-BGP协议

本文章收录至《网络》专栏&#xff0c;点击右上角专栏图标可访问本专栏&#xff01; 边界网关协议&#xff08;BGP&#xff09;是运行于 TCP 上的一种自治系统的路由协议。 BGP 是唯一一个用来处理像因特网大小的网络的协议&#xff0c;也是唯一能够妥善处理好不相关路由域间的…...

【mac系统】mac系统调整妙控鼠标速度

当下环境&#xff1a; mac系统版本&#xff0c;其他系统应该也可以&#xff0c;大家可以自行试下&#xff1a; 鼠标 mac妙控鼠标&#xff0c;型号A1657 问题描述&#xff1a; 通过mac系统自带的鼠标速度调节按钮&#xff0c;调到最大后还是感觉移动速度哦过慢 问题解决&…...

AI > 语音识别开源项目列举

名称所属开发机构使用场景优缺点技术特点占有率描述CMU Sphinx卡内基梅隆大学嵌入式设备、服务器应用优点&#xff1a;可用于嵌入式设备和服务器应用。 缺点&#xff1a;准确率相对较低&#xff0c;适用范围有限。- 支持多种语言模型和工具。- 适用于嵌入式设备和服务器应用。中…...

golang单元测试及mock总结

文章目录 一、前言1、单测的定位2、vscode中生成单测 二、构造测试case的注意事项1、项目初始化2、构造空interface{}3、构造结构体的time.Time类型4、构造json格式的test case 三、运行单测文件1、整体运行单测文件2、运行单个单测文件报错&#xff08;1&#xff09;command-l…...

mysql中的‘\G’ ‘\g’ ‘;’ navicat dbeaver

省流&#xff1a; 在navicat、dbeaver等客户端中使用时&#xff0c;“\G”、“\g”、“;”都可以不需要。 “\G”、“\g”、“;”都是用来做sql的结束符用。“\g”、“;”作用完全等价。“\G”是将字段横排显示转换成纵列显示。 横排显示&#xff1a; id |e…...

驱动day4work

头文件 #ifndef __CKR_H__ #define __CKR_H__typedef struct {unsigned int MODER; // 00unsigned int OTYPER; // 04unsigned int OSPEEDR; // 08unsigned int PUPDR; // 0Cunsigned int IDR; // 10unsigned int ODR; // 14 } gpio_t;// GPIO口 #define PHY_GPI…...

[SQL挖掘机] - 字符串函数 - length

介绍: length函数是mysql中用于获取字符串长度的函数。它接受一个字符串作为参数&#xff0c;并返回该字符串的字符数量&#xff08;包括空格和特殊字符&#xff09;。 用法: 以下是length函数的语法&#xff1a; length(string)其中&#xff0c;string是要计算长度的字符串…...

「深度学习之优化算法」(十七)灰狼算法

1. 灰狼算法简介 (以下描述,均不是学术用语,仅供大家快乐的阅读)   灰狼算法(Grey Wolf Algorithm)是受灰狼群体捕猎行为启发而提出的算法。算法提出于2013年,仍是一个较新的算法。目前为止(2020)与之相关的论文也比较多,但多为算法的应用,应该仍有研究和改进的余…...

mysql主从复制(主-从-从)

文章目录 一、前期环境准备二、主库配置1.设置server-id值并开启binlog参数2.建立同步账户并给上权限3.查看主库状态4.锁表设置只读5.备份数据库数据 三、从库配置1.设置server-id值并开启binlog参数2.还原从主库备份数据3.设定从主库同步4.启动从库同步开关 四.测试1.在主库上…...

如何制定数据采集解决方案?

数据采集仍是人工智能&#xff08;AI&#xff09;构建团队的主要瓶颈。原因各不相同&#xff1a;用例数据可能不足&#xff0c;深度学习等新机器学习&#xff08;ML&#xff09;技术需要更多数据&#xff0c;或者团队并未建立获取所需数据的适当流程。但无论如何&#xff0c;对…...

SpringBoot-17-MyBatis动态SQL标签之常用标签

文章目录 1 代码1.1 实体User.java1.2 接口UserMapper.java1.3 映射UserMapper.xml1.3.1 标签if1.3.2 标签if和where1.3.3 标签choose和when和otherwise1.4 UserController.java2 常用动态SQL标签2.1 标签set2.1.1 UserMapper.java2.1.2 UserMapper.xml2.1.3 UserController.ja…...

【杂谈】-递归进化:人工智能的自我改进与监管挑战

递归进化&#xff1a;人工智能的自我改进与监管挑战 文章目录 递归进化&#xff1a;人工智能的自我改进与监管挑战1、自我改进型人工智能的崛起2、人工智能如何挑战人类监管&#xff1f;3、确保人工智能受控的策略4、人类在人工智能发展中的角色5、平衡自主性与控制力6、总结与…...

盘古信息PCB行业解决方案:以全域场景重构,激活智造新未来

一、破局&#xff1a;PCB行业的时代之问 在数字经济蓬勃发展的浪潮中&#xff0c;PCB&#xff08;印制电路板&#xff09;作为 “电子产品之母”&#xff0c;其重要性愈发凸显。随着 5G、人工智能等新兴技术的加速渗透&#xff0c;PCB行业面临着前所未有的挑战与机遇。产品迭代…...

可靠性+灵活性:电力载波技术在楼宇自控中的核心价值

可靠性灵活性&#xff1a;电力载波技术在楼宇自控中的核心价值 在智能楼宇的自动化控制中&#xff0c;电力载波技术&#xff08;PLC&#xff09;凭借其独特的优势&#xff0c;正成为构建高效、稳定、灵活系统的核心解决方案。它利用现有电力线路传输数据&#xff0c;无需额外布…...

高频面试之3Zookeeper

高频面试之3Zookeeper 文章目录 高频面试之3Zookeeper3.1 常用命令3.2 选举机制3.3 Zookeeper符合法则中哪两个&#xff1f;3.4 Zookeeper脑裂3.5 Zookeeper用来干嘛了 3.1 常用命令 ls、get、create、delete、deleteall3.2 选举机制 半数机制&#xff08;过半机制&#xff0…...

微信小程序 - 手机震动

一、界面 <button type"primary" bindtap"shortVibrate">短震动</button> <button type"primary" bindtap"longVibrate">长震动</button> 二、js逻辑代码 注&#xff1a;文档 https://developers.weixin.qq…...

论文解读:交大港大上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架(一)

宇树机器人多姿态起立控制强化学习框架论文解析 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化学习框架&#xff08;一&#xff09; 论文解读&#xff1a;交大&港大&上海AI Lab开源论文 | 宇树机器人多姿态起立控制强化…...

在Mathematica中实现Newton-Raphson迭代的收敛时间算法(一般三次多项式)

考察一般的三次多项式&#xff0c;以r为参数&#xff1a; p[z_, r_] : z^3 (r - 1) z - r; roots[r_] : z /. Solve[p[z, r] 0, z]&#xff1b; 此多项式的根为&#xff1a; 尽管看起来这个多项式是特殊的&#xff0c;其实一般的三次多项式都是可以通过线性变换化为这个形式…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...