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

news2024/9/25 1:25:14

📌 问题点:

        在 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;
    }
    
    @Override
    public 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的id
    Map<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.coloradmin.cn/o/1334865.html

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

相关文章

2024年软考电子商务设计师如何备考?考什么?

一、电子商务设计师概述&#xff1f; 电子商务设计师属于软考中级资格考试&#xff0c;软考是由国家人力资源和社会保障部&#xff08;原人事部&#xff09;、工业和信息化部&#xff08;原信息产业部&#xff09;领导的国家级考试&#xff0c;其目的是&#xff0c;科学、公正…

Python中Pandas详解之数据结构

文章目录 Pandas 数据分析Pandas 简介Pandas 安装Series 类型数据Series的创建Series的访问Series 中向量化操作与布尔索引Series的切片Series的缺失值Series的增与删Series的name DataFrame 数据类型DataFrame的创建DataFrame的访问DataFrame的删除DataFrame的添加添加行添加列…

【WPF.NET开发】数据绑定应用场景

目录 1、实现属性更改通知 示例 2、双向绑定​​​更新源 示例 3、对分层数据使用主-从模式 示例 4、对分层 XML 数据使用主-从模式 示例 5、绑定两个控件的属性 示例 6、创建和绑定到 ObservableCollection 示例 7、使用 XMLDataProvider 和 XPath 查询绑定到 XML…

Nginx快速入门:return、rewrite重定向、重写详解(六)

0. 引言 我们在日常的生产过程中&#xff0c;常常有需要重定向转发的需求&#xff0c;比如企业更换了域名&#xff0c;但又要保证之前的域名能访问&#xff0c;这就需要做重定向的跳转。 我们在之前的章节中学习了Nginx的负载均衡、各类转发代理配置&#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;各种各样的使用需求也被开发出来&…

Python基础入门第六节课笔记

while循环 for循环用于针对序列中的每个元素的一个代码块。 while循环是不断的运行&#xff0c;直到指定的条件不满足为止。 while 条件&#xff1a; 条件成立重复执行的代码1 条件成立重复执行的代码2 …….. 当条件成立时&#xff0c;执行下方缩…

Nature | 大型语言模型(LLM)能够产生和发现新知识吗?

大型语言模型&#xff08;LLM&#xff09;是基于大量数据进行预训练的超大型深度学习模型。底层转换器是一组神经网络&#xff0c;这些神经网络由具有自注意力功能的编码器和解码器组成。编码器和解码器从一系列文本中提取含义&#xff0c;并理解其中的单词和短语之间的关系。通…

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

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

vmware虚拟机不显示网络图标没有网络解决办法

1、虚拟机终端执行命令 sudo service network-manager stop sudo rm /var/lib/NetworkManager/NetworkManager.state sudo service network-manager start即可出现网络图标并正常连接到网络 2、设置网络适配器为NAT 先移除网络适配器再添加网络适配器网络连接选择NAT模式

洛谷 CSP-J2020 优秀的拆分 + 直播获奖

第一道题目&#xff1a;优秀的拆分&#xff1a; 样例以及数据范围&#xff1a; 这道题目我个人一开始是并未做出来的&#xff0c;因为一开始我并没有去学习位运算&#xff0c;然后请教了一下他人&#xff0c;接下来我将对这道题的思路进行解答&#xff1a;首先我们看到n的范围是…

安捷伦Agilent 8720ES矢量网络分析仪

Agilent安捷伦8720ES S-参数矢量网络分析仪 50MHz至20GHz 100 dB 的动态范围 优异的测量精度 2个测量通道 4个显示通道 频率和功率扫描 快扫描和数据传输速度 通过/失败测试&#xff0c;强大的标记功能 电校准&#xff08;ECal&#xff09; 内部使用测试序列的自动化 可选时域…

【网络编程】基于UDP数据报实现回显服务器程序

个人主页&#xff1a;兜里有颗棉花糖 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 兜里有颗棉花糖 原创 收录于专栏【网络编程】【Java系列】 本专栏旨在分享学习网络编程的一点学习心得&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 前言 我们如果…

自媒体短视频音效、配乐素材哪里找?

找短视频音乐、音效素材就上这5个网站&#xff0c;免费下载&#xff0c;建议收藏。 1、潮点视频 https://shipin520.com/shipin-yy/?from_code2510 一个专门分享高质量视频的网站&#xff0c;站内还有非常丰富的配乐素材&#xff0c;全部都有详细的分类&#xff0c;可以选择…

【深度学习-目标检测】02 - Fast R-CNN 论文学习与总结

论文地址&#xff1a;Fast R-CNN 论文学习 1. 摘要&#xff08;Abstract&#xff09; Fast R-CNN方法的提出&#xff1a; 论文提出了一种快速区域卷积网络的办法&#xff0c;基于之前的R-CNN网络进行改进。 效率和准确性的提升&#xff1a; Fast R-CNN 在之前的工作基础上&a…

CentOS环境下Nacos2.3集成PostgreSQL

title: CentOS环境下Nacos2.3集成PostgreSQL date: 2023-12-21 19:15:00 categories: Nacos description: CentOS环境下Nacos2.3集成PostgreSQL 1. 目录 1. 目录2. 简介3. 安装部署 3.1. 部署模式3.2. 环境准备3.3. 下载安装文件3.4. PostgreSQL插件 3.4.1. 下载地址3.4.2. 结…

南邮算法期末复习

算法复习 知识点 多项式时间复杂度是指在多项式阶内&#xff08;例如&#xff0c;O(n^2), O(n^3)&#xff09;增长的算法。AOE网中的关键路径 &#xff0c;就是完成整个网络所需的最短时间&#xff0c;亦最长路径 &#xff0c;AOE网中&#xff0c;往往有若干项活动可以平行的…

ThunderSearch(闪电搜索器)_网络空间搜索引擎工具_信息收集

文章目录 ThunderSearch简介1 项目地址2 使用方式2.1 配置文件config.json说明2.2 构建和运行 3 使用式例 ThunderSearch简介 ThunderSearch&#xff08;闪电搜索器&#xff09;是一款使用多个(【支持Fofa、Shodan、Hunter、Zoomeye、360Quake网络空间搜索引擎】网络空间搜索引…

如何实现https密钥对登录方式

先安装docker yum install -y yum-utils device-mapper-persistent-data lvm2 yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo systemctl start docker.service systemctl enable docker.service yum install -y docker…

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

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

2023年12月【考试战报】|ORACLE OCP 19C考试通过

2023年10月【考试战报】|ORACLE OCP 19C考试通过-CSDN博客文章浏览阅读122次。自OCP认证进入中国以来&#xff0c;越来越被大多数DBA所认可&#xff0c;也越来越被企业所重视&#xff0c;90%以上DBA深造&#xff0c;都会选择OCP认证。随着OCP认证在全国范围内的普及&#xff0c…