【各种**问题系列】Java 数组集合之间的相互转换

📌 问题点:

        在 Coding 过程中经常会遇到数组、List、Set、Map 之间的相互转换......这里记录一下转换的几种方式。😶😶😶

目录

📌 集合转换

1.数组 转 List:

2.List 转 数组:

3.List 转 Set / Set 转 List:

4.List 转 Map:

5.Map 转 List / Set:

6.List 转 List / Set:

📌 拓展知识点


📌 集合转换:

1.数组 转 List:

        将数组 Array 转换成集合,数组中的元素必须是引用数据类型,如果基本数据类型的数组转换成集合,会将整个数组当作一个对象转换。

        最简单的方法就是使用 for 循环遍历:

private static void arrToList() {int[] arr = {1, 2, 3, 4, 5};// 注意基础数据类型转换为对应的包装类型(集合中存储引用类型)ArrayList<Integer> arrayList = new ArrayList<>();for (int i = 0; i < arr.length; i++) {arrayList.add(arr[i]);}
}

        Arrays.asList() 返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。

private static void arrToList() {// 基本数据类型的数组转换成集合,会将整个数组当作一个对象转换// 输出:数组地址int[] arr = {1, 2, 3, 4, 5};List<int[]> list = Arrays.asList(arr);System.out.println(list);// 将数组转换成集合,数组必须是引用数据类型// 输出:[1, 2, 3, 4, 5]Integer[] arr2 = {1, 2, 3, 4, 5};// Arrays.asList()返回一个受指定数组支持的固定大小的列表。所以不能做Add、Remove等操作。List<Integer> list2 = Arrays.asList(arr2);// 再次新建List就可以了List<Integer> list3 = new ArrayList<>(list2);list3.add(7);System.out.println(list2);System.out.println(list3);
}

2.List 转 数组:

        使用 List 中定义的 API 转换:

private static void listToArr() {// 数组必须是引用数据类型List<String> list = new ArrayList<>();for (int i = 0; i < 4; i++) {list.add("List元素:" + i);}// 创建一个数组:String[] arr = new String[list.size()];// 将数组作为参数传入:list.toArray(arr);System.out.println(Arrays.toString(arr));
}

3.List 转 Set / Set 转 List:

        将 List 集合转为 Set 集合,是可以直接去重的。

private static void listToSet(){List<String> list = new ArrayList<>();for (int i = 0; i < 4; i++) {list.add("List元素:"+i);}// 直接new一个对象,将list放入即可Set<String> set = new HashSet<>(list);System.out.println(set.toString());
}

        Set 集合转 List 集合类似,直接 new 一个 List 对象,将 set 集合放入即可

4.List 转 Map:

        如果我们的 List 存放的对象,我们想要将其转化为 Map 集合,key为对象的某个属性。(使用 Stream 流 API 实现)

public class TestEntity {private Integer id;private String name;public Integer getId() {return id;}public void setId(Integer id) {this.id = id;}public String getName() {return name;}public void setName(String name) {this.name = name;}@Overridepublic String toString() {return "TestEntity{" +"id=" + id +", name='" + name + '\'' +'}';}
}
private static void listToMap(){List<TestEntity> list = new ArrayList<>();for (int i = 0; i < 4; i++) {TestEntity testEntity = new TestEntity();testEntity.setId(i);testEntity.setName("name-"+i);list.add(testEntity);}System.out.println(list.toString());// 使用stream流的方式实现,高效// 此处map的key是 TestEntity的idMap<Integer, TestEntity> map = list.stream().collect(Collectors.toMap(TestEntity::getId, Function.identity(), (key1, key2) -> key2));System.out.println(map.toString());
}

5.Map 转 List / Set:

private static void mapToList(){Map<Integer, TestEntity> map = new HashMap<>();for (int i = 0; i < 4; i++) {TestEntity testEntity = new TestEntity();testEntity.setId(i);testEntity.setName("name:"+i);map.put(i, testEntity);}// 直接获取map的key的set集合Set<Integer> set1 = map.keySet();// 将map的values 转换为Set集合Set<TestEntity> set = new HashSet<>(map.values());// 将map的values 转换为List集合List<TestEntity> list = new ArrayList<>(map.values());System.out.println(set.toString());System.out.println(list.toString());
}

6.List 转 List / Set:

        需求:List1 集合存放是对象,我们希望直接从集合里获取到 对象的某个属性的 List2  集合(使用Stream流实现)

private static void listToList(){List<TestEntity> list = new ArrayList<>();for (int i = 0; i < 4; i++) {TestEntity testEntity = new TestEntity();testEntity.setId(i);testEntity.setName("name-"+i);list.add(testEntity);}// 获取到 name的list集合List<String> list1 = list.stream().map(TestEntity::getName).collect(Collectors.toList());// 获取到 name的set集合Set<String> set = list.stream().map(TestEntity::getName).collect(Collectors.toSet());System.out.println(list1.toString());
}

📌 拓展知识点:

        针对集合的操作使用 JDK 8 新特性 Stream 流 API 操作更方便!!!

Java 8 Stream | 菜鸟教程 (runoob.com)icon-default.png?t=N7T8https://www.runoob.com/java/java8-streams.html

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

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

相关文章

如何将本地websocket发布至公网并实现远程访问服务端

文章目录 1. Java 服务端demo环境2. 在pom文件引入第三包封装的netty框架maven坐标3. 创建服务端,以接口模式调用,方便外部调用4. 启动服务,出现以下信息表示启动成功,暴露端口默认99995. 创建隧道映射内网端口6. 查看状态->在线隧道,复制所创建隧道的公网地址加端口号7. 以…

AG16KDDF256 User Manual

AGM AG16KDDF256 是由 AGM FPGA AG16K 与 DDR-SDRAM 叠封集成的芯片&#xff0c;具有 AG16K FPGA的可编程功能&#xff0c;提供更多可编程 IO&#xff0c;同时内部连接大容量 DDR-SDRAM。  FPGA 外部管脚 FBGA256 封装&#xff0c;管脚说明请见下表 Table-1&#xff1a; Tab…

YUM和编译安装

一、安装Linux 1.编译安装&#xff0c;灵活性高&#xff0c;难度较大&#xff0c;可以安装较新的版本 2.rpm安装&#xff08;redhat&#xff09; linux包安装 rpm 软件名 3.yum yum是rpm升级版本&#xff0c;解决了rpm的弊端 2和3用的都是红帽打包好的软件包&#xff0c;能…

cad安装路径显示灰色选择不了怎么办?

cad安装路径显示灰色选择不了怎么办呢&#xff1f;今天教给大家。 灰色是因为之前下载过一次&#xff0c;没有删干净&#xff0c;注册表里还有cad&#xff0c;它认为你的电脑中有cad&#xff0c;所以安装路径是灰色的&#xff0c;不能安装。先同时按下【xinR】键&#xff0c;打…

ip addr和ifconfig

ip addr可以显示更多信息&#xff0c;包括为启动的网络驱动如wlan&#xff0c;而ifocnfig只显示在线的驱动。若wlan是down的&#xff0c;则ip addr会显示信息&#xff0c;ifconfig不会显示信息。 ip addr: ifconfig:

视频号视频怎么保存到手机相册?

在微信视频号中看到喜欢的视频&#xff0c;想要缓存下载到手机&#xff0c;却怎么也找不到办法。很多朋友会选择去录屏&#xff0c;但保存下来的视频实在是不美观&#xff0c;而且费时费力&#xff01;着实没必要&#xff01;下面给大家推荐一款亲测有效的微信视频号视频下载方…

【excel密码】Excel工作表不能复制或移动

为什么excel文件打开之后&#xff0c;工作表里是可以编辑的&#xff0c;但是想要移动工作表或者复制、重命名等操作&#xff0c;这是什么原因&#xff1f;其实这是因为设置了工作簿保护&#xff0c;设置了保护的工作簿无法对整张工作表进行操作。 想要取消这种保护&#xff0c;…

算法——哈希表

哈希表简介 **是什么&#xff1a;**存储数据的容器有什么用&#xff1a;快速查找某个元素&#xff0c;时间复杂度O(1)&#xff0c;空间复杂度O(n)**什么时候使用哈希表&#xff1a;**频繁查找某一个数&#xff08;这里不要忘了之前的二分&#xff0c;时间复杂度O(logN)&#x…

opencv入门到精通——图像平滑

目录 目标 2D卷积&#xff08;图像过滤&#xff09; 图像模糊&#xff08;图像平滑&#xff09; 1.平均 2.高斯模糊 3.中位模糊 4.双边滤波 目标 学会&#xff1a; 使用各种低通滤镜模糊图像 将定制的滤镜应用于图像&#xff08;2D卷积&#xff09; 2D卷积&#xff0…

Unity网格篇Mesh(一)

Unity网格篇Mesh&#xff08;一&#xff09; 本文的目标1.渲染仔细看下面的图你会发现&#xff0c;锯齿状 2.创建网格顶点4 x 2网格网格的顶点 3.创建网格网格只在Play模式下显示逆时针和顺时针三角形第一个三角面一个四边形由两个三角面组成第一个四边形填充剩余网格 接下一篇…

【论文阅读笔记】SegVol: Universal and Interactive Volumetric Medical Image Segmentation

Du Y, Bai F, Huang T, et al. SegVol: Universal and Interactive Volumetric Medical Image Segmentation[J]. arXiv preprint arXiv:2311.13385, 2023.[代码开源] 【论文概述】 本文思路借鉴于自然图像分割领域的SAM&#xff0c;介绍了一种名为SegVol的先进医学图像分割模型…

2024年关于存储发展趋势的七大预言

本文介绍了2024年的七大存储发展趋势&#xff0c;涵盖网络安全、混合云存储、绿色IT、客户体验和容器化应用程序等方面&#xff0c;并阐述了如何腾出财务和运营资源、投入到人工智能&#xff08;AI&#xff09;及其他IT项目上&#xff0c;以及如何堵住IT技能缺口。 趋势1&#…

LLM之RAG理论(二)| RAG综述论文详解

论文地址&#xff1a;https://arxiv.org/pdf/2312.10997.pdf 大型语言模型&#xff08;LLMs&#xff09;展示了强大的能力&#xff0c;但在实际应用中仍面临挑战&#xff0c;如幻觉现象、知识更新缓慢&#xff0c;以及在回答中缺乏透明度。检索增强生成&#xff08;RAG&#xf…

制作TikTok获客脚本必备源代码!

在这个数字时代&#xff0c;TikTok已成为全球最受欢迎的社交媒体平台之一&#xff0c;无数的品牌和企业都试图通过这个平台吸引潜在客户。 但是&#xff0c;要想在TikTok上获得更多关注和粉丝&#xff0c;除了制作有趣、有创意的内容外&#xff0c;还需要借助一些自动化工具来…

路由器介绍和命令操作

先来回顾一下上次的内容&#xff1a; ip地址就是由32位二进制数组 二进位数就是只有数字0和1组成 网络位&#xff1a;类似于区号&#xff0c;表示区域作用 主机位&#xff1a;类似于号码&#xff0c;表示区域中编号 网络名称&#xff1a;网络位不变&#xff0c;主机位全为0 …

【svn】win11最新svn每天自动化定时update、commit,隐藏窗口,定时脚本编写

本文使用schtasks结合bat脚本实现全自动svn update以及commit操作。执行时隐藏cmd窗口&#xff0c;全自动后台执行。 执行脚本 写脚本参考了网上很多文章&#xff0c;但是这些文章的方法都有问题或者已经失效&#xff0c;比如&#xff1a; 老版本的bat脚本&#xff0c;使用v…

【hacker送书第11期】Python数据分析从入门到精通

探索数据世界&#xff0c;揭示未来趋势 《Python数据分析从入门到精通》是你掌握Python数据分析的理想选择。本书深入讲解核心工具如pandas、matplotlib和numpy&#xff0c;助您轻松处理和理解复杂数据。 通过matplotlib、seaborn和创新的pyecharts&#xff0c;本书呈现生动直…

本地部署Jellyfin影音服务器并实现远程访问内网影音库

文章目录 1. 前言2. Jellyfin服务网站搭建2.1. Jellyfin下载和安装2.2. Jellyfin网页测试 3.本地网页发布3.1 cpolar的安装和注册3.2 Cpolar云端设置3.3 Cpolar本地设置 4.公网访问测试5. 结语 1. 前言 随着移动智能设备的普及&#xff0c;各种各样的使用需求也被开发出来&…

路径规划最全综述+代码+可视化绘图(Dijkstra算法+A*算法+RRT算法等)

路径规划综述 1. 背景介绍 路径规划是指在给定的环境中找到从起点到终点的最佳路径的过程。它在现实生活中有着广泛的应用&#xff0c;包括无人驾驶、物流配送、机器人导航等领域。随着人工智能和计算机技术的发展&#xff0c;路径规划技术也在不断地得到改进和应用。 路径规划…

C# Onnx yolov8 pokemon detection

目录 效果 模型信息 项目 代码 下载 C# Onnx yolov8 pokemon detectio 效果 模型信息 Model Properties ------------------------- date&#xff1a;2023-12-25T17:55:44.583431 author&#xff1a;Ultralytics task&#xff1a;detect license&#xff1a;AGPL-3.0 h…