【各种**问题系列】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.hqwc.cn/news/300523.html

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

相关文章

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-1x110

如上表所示&#xff0c;MOE1&#xff0c;OSSR1&#xff0c;CCxE1&#xff0c;CCxNE0时&#xff0c;OCx对应端口的输出状态取决于OCx_REF与极性选择&#xff08;CCxP&#xff09;&#xff1b;OCxN输出状态取决于极性选择&#xff08;CCxNP&#xff09;。 ---------------------…

为何教育行业需要搭建自己的知识付费平台,而非入驻其他公域流量平台

在当今的知识经济时代&#xff0c;教育行业正面临着前所未有的机遇和挑战。随着知识付费市场的蓬勃发展&#xff0c;越来越多的教育机构和个人教师选择进入这一领域&#xff0c;以扩大影响力并实现知识变现。然而&#xff0c;在选择进入知识付费市场的路径时&#xff0c;教育行…

OGG-MySQL无法正常同步数据问题分析

问题背景: 用户通过OGG从源端一个MySQL从库将数据同步到目标端的另一个MySQL数据库里面&#xff0c;后面由于源端的从库出现了长时间的同步延时&#xff0c;由于延时差距过大最后选择通过重建从库方式进行了修复 从库重建之后&#xff0c;源端的OGG出现了报错ERROR OGG-0014…

C# 初识System.IO.Pipelines

写在前面 在进一步了解Socket粘包分包的过程中&#xff0c;了解到了.NET 中的 System.IO.Pipelines&#xff0c;可以更优雅高效的解决这个问题&#xff1b;先跟随官方的示例做个初步的认识。 System.IO.Pipelines 是一个库&#xff0c;旨在使在 .NET 中执行高性能 I/O 更加容…

【论文阅读】MCANet: Medical Image Segmentation with Multi-Scale Cross-Axis Attention

文章目录 摘要创新点总结实现效果总结 摘要 链接&#xff1a;https://arxiv.org/abs/2312.08866 医学图像分割是医学图像处理和计算机视觉领域的关键挑战之一。由于病变区域或器官的大小和形状各异&#xff0c;有效地捕捉多尺度信息和建立像素间的长距离依赖性至关重要。本文提…

谷歌公布 2023 年最受欢迎的 Chrome 扩展

2023年&#xff0c;谷歌公布了最受欢迎的Chrome扩展&#xff0c;共有12款涵盖了多个领域&#xff0c;从提升工作效率到游戏娱乐。这些扩展旨在增强用户的浏览体验和生产力。 Scribe 功能&#xff1a;使用AI记录工作流程并创建逐步指南。 特点&#xff1a;自动记录和生成详细…

Hive05_DML 操作

1 DML 数据操作 1.1 数据导入 1.1.1 向表中装载数据&#xff08;Load&#xff09; 1&#xff09;语法 hive> load data [local] inpath 数据的 path [overwrite] into table student [partition (partcol1val1,…)];&#xff08;1&#xff09;load data:表示加载数据 &…

【单调队列】LeetCode1499:满足不等式的最大值

涉及知识点 单调队列 题目 给你一个数组 points 和一个整数 k 。数组中每个元素都表示二维平面上的点的坐标&#xff0c;并按照横坐标 x 的值从小到大排序。也就是说 points[i] [xi, yi] &#xff0c;并且在 1 < i < j < points.length 的前提下&#xff0c; xi &…

【如何破坏单例模式(详解)】

✅如何破坏单例模式 &#x1f4a1;典型解析✅拓展知识仓✅反射破坏单例✅反序列化破坏单例✅ObjectlnputStream ✅总结✅如何避免单例被破坏✅ 避免反射破坏单例✅ 避免反序列化破坏单例 &#x1f4a1;典型解析 单例模式主要是通过把一个类的构造方法私有化&#xff0c;来避免重…

【数据库系统概论】第3章-关系数据库标准语言SQL(3)

文章目录 3.5 数据更新3.5.1 插入数据3.5.2 修改数据3.5.3 删除数据 3.6 空值的处理3.7 视图3.7.1 建立视图3.7.2 查询视图3.7.3 更新视图3.7.4 视图的作用 3.5 数据更新 3.5.1 插入数据 注意&#xff1a;插入数据时要满足表或者列的约束条件&#xff0c;否则插入失败&#x…

WebRTC概念

定义 一个实时通信标准 通话原理 媒体协商 在WebRTC中&#xff0c;参与视频通讯的双方必须先交换SDP信息&#xff0c;获得一个都支持的编码格式 网络协商 目的&#xff1a;找到一条相互通讯的链路 做法&#xff1a;获取外网IP地址映射&#xff0c;通过信令服务器交换“网…

C语言学习day10:if语句

程序流程结构&#xff1a; C 语言支持最基本的三种程序运行结构:顺序结构、选择结构、循环结构。 顺序结构:程序按顺序执行&#xff0c;不发生跳转。选择结构:依据是否满足条件&#xff0c;有选择的执行相应功能。循环结构:依据条件是否满足&#xff0c;循环多次执行某段代码…