【各种**问题系列】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;
    }
    
    @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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【DevOps 工具链】软件版本号命名规范 - 3种规则(读这一篇就够了)

文章目录 1、简述2、常见软件的版本号命名规则3、版本号命名规范整理3.1、XYZ/MMP3.1.1、规则3.1.2、确定3.1.3、举例3.1.4、详细规则 3.2、XYZD/MMPD3.3、VRC3.3.1、规则3.3.2、对"Vxxx"的说明3.3.3、对"Rxxx"的说明3.3.4、对"LLL"的说明3.3.5、…

Databend 开源周报第 125 期

Databend 是一款现代云数仓。专为弹性和高效设计&#xff0c;为您的大规模分析需求保驾护航。自由且开源。即刻体验云服务&#xff1a;https://app.databend.cn 。 Whats On In Databend 探索 Databend 本周新进展&#xff0c;遇到更贴近你心意的 Databend 。 密码策略 Data…

8.21 PowerBI系列之DAX函数专题-帕累托分析

需求 实现 1 按商品小类累积 var rollup_sales calculate(//计算当前累计销售额 [销售额], filter(allselected(order_2[产品小类]),sum(order_2[订单金额])<[销售额]) ) //按小类累积金额,filter内的销售额为选中的各小类的销售额 //金额从大到小累积&#xff0c;用&l…

RabbitMQ如何做到不丢不重

目录 MQTT协议 如何保证消息100%不丢失 生产端可靠性投递 ​编辑 RabbitMQ的Broker端投 &#xff08;1&#xff09;消息持久化 &#xff08;2&#xff09;设置集群镜像模式 &#xff08;3&#xff09;消息补偿机制 消费端 ACK机制改为手动 总结 MQTT协议 先来说下MQTT…

阿里云经济型e实例2核2G3M99元1年,性价比超高的入门级云服务器

产品简介 经济型e实例是阿里云面向个人开发者、学生、小微企业&#xff0c;在中小型网站建设、开发测试、轻量级应用等场景推出的全新入门级云服务器&#xff0c;采用Intel Xeon Platinum架构处理器&#xff0c;支持1:1、1:2、1:4多种处理器内存配比&#xff0c;采用非绑定CPU…

IntelliJ IDEA快捷键及调试

文章目录 一、IntelliJ IDEA 常用快捷键一览表1-IDEA的日常快捷键第1组&#xff1a;通用型第2组&#xff1a;提高编写速度&#xff08;上&#xff09;第3组&#xff1a;提高编写速度&#xff08;下&#xff09;第4组&#xff1a;类结构、查找和查看源码第5组&#xff1a;查找、…

ES8生产实践——Kibana对接Azure AD实现单点登录

基本概念介绍 什么是单点登录 单点登录&#xff08;Single Sign-On&#xff0c;SSO&#xff09;是一种身份验证和访问控制机制&#xff0c;允许用户使用一组凭据&#xff08;通常是用户名和密码&#xff09;仅需登录一次&#xff0c;即可访问多个应用程序或系统&#xff0c;而…

DDIM详解

DDIM详解 参考&#xff1a;https://www.bilibili.com/video/BV1VP411u71p/ 虽然 DDIM 现在主要用于加速采样&#xff0c;但他的实际意义远不止于此。本文将首先回顾 DDPM 的训练和采样过程&#xff0c;再讨论 DDPM 与 DDIM 的关系&#xff0c;然后推导 DDIM 的采样公式&#xf…

MySQL的事务-隔离级别

上篇&#xff0c;整理了MySQL事务的原子性&#xff0c;这篇继续整理MySQL事务的一致性、隔离性和持久性。 2. 一致性指的是事务开始前和结束后&#xff0c;数据库的完整性约束没有被破坏&#xff0c;这保证了数据的完整性和一致性。一致性必须确保数据库从一个一致的状态转换到…

【无标题】【一周安全资讯1223】一图读懂《工业和信息化部办公厅关于组织开展网络安全保险服务试点工作的通知》;15亿条纽约房产记录泄露

要闻速览 1、一图读懂《工业和信息化部办公厅关于组织开展网络安全保险服务试点工作的通知》 2、国家数据局《“数据要素”三年行动计划 (2024—2026年)》公开征求意见 3、中国信息通信研究院发布《公共数据授权运营发展洞察 (2023年)》 4、15亿条纽约房产记录泄露&#xff0c…

c# OpenCvSharp透视矫正六步实现透视矫正(八)

透视矫正,引用文档拍照扫描&#xff0c;相片矫正这块。 读取图像Cv2.ImRead();预处理&#xff08;灰度化&#xff0c;高斯滤波、边缘检测&#xff09;轮廓检测&#xff08;获取到最大轮廓&#xff09;获取最大面积轮廓的四个顶点标识最小矩形坐标透视矫正显示 完整代码 // 1、…

结构体的对齐规则

1.引入 我们在掌握了结构体的基本使⽤后。 现在我们深⼊讨论⼀个问题&#xff1a;计算结构体的大小。 这也是⼀个特别热门的考点&#xff1a; 结构体内存对齐。 2.具体分析 ⾸先我们得掌握结构体的对⻬规则&#xff1a; 1. 结构体的第⼀个成员对⻬到和结构体变量起始位置偏移量…

直通车定义、功能以及扣费原则

1.直通车是天猫付费搜索广告&#xff0c;即时需求&#xff0c;是消费者主动来搜索的&#xff0c;cpc扣费原则&#xff0c;一般用来拉新或者收割客户&#xff1b; 2.一般关键词优先&#xff0c;人群溢价是用来更精准投放的&#xff0c;可以不投溢价人群&#xff1b; 3.溢价人群…

移动开发新的风口?Harmony4.0鸿蒙应用开发基础+实践案例

前段时间鸿蒙4.0引发了很多讨论&#xff0c;不少业内人士认为&#xff0c;鸿蒙将与iOS、安卓鼎足而三了。 事实上&#xff0c;从如今手机操作系统竞赛中不难看出&#xff0c;安卓与iOS的形态、功能逐渐趋同化&#xff0c;两大系统互相取长补短&#xff0c;综合性能等差距越来越…

详细学习Java注解Annotation、元注解(通俗易懂,一学就会)

概述 底层原理 自定义注解 示例代码&#xff1a; 1. 2.只有属性名为value的才可以&#xff0c;java对它进行了标识&#xff0c;如果是其他别名如value1是不行的 3.多个属性&#xff0c;必须用键值对形式&#xff0c;不能少写&#xff0c;也不能多写&#xff0c;除非有default修…

Apache Commons BeanUtils: JavaBean操作的艺术

第1部分&#xff1a;Apache Commons BeanUtils 简介 咱们今天聊聊Apache Commons BeanUtils。这货简直就是处理JavaBean的利器&#xff0c;用起来又方便又快捷。不管是属性拷贝、类型转换&#xff0c;还是动态访问&#xff0c;BeanUtils都能轻松应对。 BeanUtils是啥&#xf…

H266/VVC帧内预测编码技术概述

预测编码技术 预测编码&#xff08;Prediction Coding&#xff09;是指利用已编码的一个或多个样本值&#xff0c;根据某种模型或方法&#xff0c;对当前的样本值进行预测&#xff0c;并对样本真实值和预测值之间的差值进行编码。 视频中的每个像素看成一个信源符号&#xff…

Java并发(二十一)----wait notify介绍

1、小故事 - 为什么需要 wait 由于条件不满足&#xff08;没烟干不了活啊&#xff0c;等小M把烟送过来&#xff09;&#xff0c;小南不能继续进行计算 但小南如果一直占用着锁&#xff0c;其它人就得一直阻塞&#xff0c;效率太低 于是老王单开了一间休息室&#xff08;调…

时间Date

你有没有思考过时间问题&#xff1a; 前端为什么可以直接看见时间格式的数据 后端怎么接受的数据&#xff0c;怎么处理的 一般来说&#xff1a;前端传输来数据都是时间格式的字符串&#xff0c;那么后端需要能够解析时间格式的字符串&#xff0c;归功于JSONFormat ,可以解析…

node封装一个图片拼接插件

说在前面 平时我们拼接图片的时候一般都要通过ps或者其他图片处理工具来进行处理合成&#xff0c;这次有个需求就需要进行图片拼接&#xff0c;而且我希望是可以直接使用代码进行拼接&#xff0c;于是就有了这么一个工具包。 插件效果 通过该插件&#xff0c;我们可以将图片进…