Java中常见转换-数组与list互转、驼峰下划线互转、Map转Map、List转Map、进制转换的多种方式

news2024/12/24 20:30:07

场景

Java中数组与List互转的几种方式

数组转List

1、最简单的方式,Arrays.asList(array); 创建的是不可变列表,不能删除和新增元素

        String[] array = new String[]{"a","b"};
        List<String> stringList = Arrays.asList(array);
        System.out.println(stringList);//[a, b]

但是如果修改为如下

        String[] arrayA = new String[]{"a","b"};
        List<String> stringListA = Arrays.asList(arrayA);
//        System.out.println(stringListA);
//        stringListA.add("c");
//        System.out.println(stringListA);

运行直接抛出异常Exception in thread "main" java.lang.UnsupportedOperationException
这是因为通过Arrays.asList创建的List,虽然命名也是ArrayList,但是全路径为java.util.Arrays.ArrayList
不支持add,remove操作,但是可以更新列表中元素的值。

 

不支持add,remove操作,但是可以更新列表中元素的值。

        stringListA.set(1,"c");
        System.out.println(stringListA);

2、如果需要对转换后的list进行操作,可以用以下方式

        String[] arrayB = new String[]{"a","b"};
        ArrayList<String> strings = new ArrayList<>(Arrays.asList(arrayB));
        strings.add("c");
        System.out.println(strings);//[a, b, c]

相当于用列表创建列表,属于深拷贝的一种表现,获得的列表支持新增、删除

3、第三种借助于jdk提供的容器工具类Collections来实现-推荐写法

        String[] arrayC = new String[]{"a","b"};
        //创建列表,并指定长度,避免可能产生的扩容
        List<String> list= new ArrayList<>(arrayC.length);
        //实现数组添加到列表中
        Collections.addAll(list,arrayC);
        //因为列表为我们定义的ArrayList,所以可以对它进行增删改
        list.add("c");
        System.out.println(list);

列表转数组

列表转数组,直接调用List.toArray

        List<String> listA = Arrays.asList("a","b","c");
        //返回的是Object[]数组
        Object[] objects = listA.toArray();
        //如果需要指定数组类型,可以传一个指定各类型的空的数组
        String[] strings1 = listA.toArray(new String[]{});

Java中驼峰与下划线互转

1、使用guava

        //驼峰转下划线
        String baDao = CaseFormat.LOWER_CAMEL.to(CaseFormat.LOWER_UNDERSCORE, "baDao");
        System.out.println(baDao);
        //下划线转驼峰
        String ba_dao = CaseFormat.LOWER_UNDERSCORE.to(CaseFormat.LOWER_CAMEL, "ba_dao");
        System.out.println(ba_dao);

2、使用Hutool工具类

        String ba_dao1 = StrUtil.toCamelCase("ba_Dao");
        System.out.println(ba_dao1);
        String baDao1 = StrUtil.toUnderlineCase("baDao");
        System.out.println(baDao1);

Java中Map转换Map的几种方式

比如希望将一个Map<String,Integer>转换成Map<String,String>

首先提供一个创建Map的公共方法newMap

    private static <T> Map<String,T> newMap(String key,T val,Object... kv){
        Map<String,T> ans = new HashMap<>(8);
        ans.put(key,val);
        for (int i = 0,size = kv.length; i < size; i+=2) {
            ans.put(String.valueOf(kv[i]),(T)kv[i+1]);
        }
        return ans;
    }

1、基本的for循环转换

        Map<String, Integer> map = newMap("k", 1, "a", 2, "b", 3);
        HashMap<String,String> ans = new HashMap<>(map.size());
        for (Map.Entry<String,Integer> entry:map.entrySet()) {
            ans.put(entry.getKey(),String.valueOf(entry.getValue()));
        }
        System.out.println(ans);

2、容器的流式使用

        Map<String, Integer> map1 = newMap("k", 1, "a", 2, "b", 3);
        Map<String, String> collect = map1.entrySet().stream().collect(Collectors.toMap(Map.Entry::getKey, s -> String.valueOf(s.getValue())));
        System.out.println(collect);

3、Guava的transform方式

        Map<String, Integer> map2 = newMap("k", 1, "a", 2, "b", 3);
        Map<String, String> stringStringMap = Maps.transformValues(map2, String::valueOf);
        System.out.println(stringStringMap);

Java中List转Map的几种方式

如何将List转为Map<Object,List<Object>>

1、基本写法

        List<String> list = new ArrayList<String>(){{
            add("badao");
            add("de");
            add("cheng");
            add("xv");
            add("yuan");
        }};
        Map<Integer,List<String>> ans = new HashMap<>();
        for (String str:list) {
            List<String> sub = ans.get(str.length());
            if(sub == null){
                sub = new ArrayList<>();
                ans.put(str.length(),sub);
            }
            sub.add(str);
        }
        System.out.println(ans);

2、对于jdk8,上面for循环的内容可以利用Map.computeIfAbsent来替换

computeIfAbsent:如果key对应的value不存在,则使用获取 mappingFunction 计算后的值,

并保存为该 key 的 value,否则返回 value。

        Map<Integer,List<String>> ans2 = new HashMap<>();
        for (String str:list) {
            ans2.computeIfAbsent(str.length(),k->new ArrayList<>()).add(str);
        }
        System.out.println(ans2);

3、在jdk8中借助stream的流处理,可以将上面更一步进行简化

        Map<Integer, List<String>> collect = list.stream().collect(Collectors.groupingBy(String::length));
        System.out.println(collect);

4、上面是针对特定的列表,针对业务进行开发转换,下面构建一个通用的工具类toMapList

    /**
     * List<V> 转换成Map<K,List<V>>  特点在于Map中的value是个列表,且列表中的元素就是从原列表中的元素获取
     * @param list
     * @param func
     * @param <K>
     * @param <V>
     * @return
     */
    public static <K,V> Map<K,List<V>> toMapList(List<V> list, Function<V,K> func){
        return list.stream().collect(Collectors.groupingBy(func));
    }

对应的调用可以改为

        Map<Integer, List<String>> integerListMap = toMapList(list, String::length);
        System.out.println(integerListMap);
        //{2=[de, xv], 4=[yuan], 5=[badao, cheng]}

5、如果希望对value也做处理,可以修改工具类

    /**
     * List<I> 转换成Map<K,List<V>> 特点在于Map中的value是个列表,且列表中的元素是由list.item转换而来
     * @param list
     * @param keyFunc
     * @param valFunc
     * @param <K>
     * @param <I>
     * @param <V>
     * @return
     */
    public static <K,I,V> Map<K,List<V>> toMapList(List<I> list,Function<I,K> keyFunc,Function<I,V> valFunc){
        return list.stream().collect(Collectors.groupingBy(keyFunc,Collectors.mapping(valFunc,Collectors.toList())));
    }

调用示例

        Map<Integer, List<String>> integerListMap1 = toMapList(list, String::length, String::toUpperCase);
        System.out.println(integerListMap1);
        //{2=[DE, XV], 4=[YUAN], 5=[BADAO, CHENG]}

6、guava工具包中提供了一个HashMultimap的工具类,它的使用和平常的map的区别是,它的value是个集合

        HashMultimap<Integer, String> map = HashMultimap.create();
        for (String str:list) {
            map.put(str.length(),str);
        }
        System.out.println(map);
        //{2=[de, xv], 4=[yuan], 5=[badao, cheng]}

Java中进行进制转换的几种方式

1、toString实现进制转换

Integer/Long toString(int i,int radix)可以将任一进制的整数,转换为其他任意进制的整数
第一个参数:待转换的数字
第二个参数:转换后的进制位

        //十六进制转十进制
        System.out.println(Integer.toString(0x12, 10));
        //八进制转十进制
        System.out.println(Integer.toString(012,10));
        //八进制转二进制
        System.out.println(Integer.toString(012,2));

2、除了使用上面的方式,还可直接使用toBinaryString来实现转二进制

        //十进制转二进制
        System.out.println(Integer.toBinaryString(2));
        //十进制转八进制
        System.out.println(Integer.toOctalString(9));
        //十进制转十六进制
        System.out.println(Integer.toHexString(10));

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

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

相关文章

嵌入式和单片机

凡是从事信息技术相关工作的&#xff0c;一定都听说过嵌入式和单片机。 大家都知道&#xff0c;这两个名词&#xff0c;和硬件系统有着非常密切的关系。 但是&#xff0c;如果要问具体什么是嵌入式&#xff0c;什么是单片机&#xff0c;它们之间究竟有什么区别&#xff0c;我…

【NovelAI 小说SD批量生成 文生图】Web版环境配置和使用方法

样片&#xff1a; 【样品】《谜影之夜》文生图全自动版SD一键成片 操作演示&#xff1a; 【txt2video web】携带漫画插件的Web版AI小说生成工具无声演示版 操作口述教程&#xff1a; 【NovelAI】携带漫画插件的Web版AI小说生成视频工具 该文章面向购买脚本的付费用户&#xff0…

钓鱼网站也在使用https加密,如何识别钓鱼网站?

信息安全是一个庞大的领域&#xff0c;其中涉及到很多知识点&#xff0c;但是大多公司都对其没有提及足够的重视&#xff0c;希望随着国内对于安全的越来越重视&#xff0c;更多的公司也能在信息安全领域投入越来越多的注意。 安装SSL证书是为了对数据进行加密传输&#xff0c…

轻松学会食堂管理,就这么简单!

随着科技进步和生活水平的不断提高&#xff0c;人们对于餐饮消费的需求也逐渐变得多样化和个性化。 高校食堂现状分析 01.信息化水平低&#xff0c;学校管理难&#xff0c;无法精准就餐&#xff1b; 02用户满意度低&#xff0c;学生取餐环节效率低&#xff1b; 03.管理效率低…

【Redis】浅谈Redis-集群(Cluster)

文章目录 前言1、集群实现1.1 创建cluster目录&#xff0c;并将redis.conf复制到该文件夹1.2 复制redis.conf&#xff0c;并进行配置1.3 启动redis&#xff0c;查看启动状态1.4 合成集群1.5 查看集群1.6 集群读写操作 2、SpringBoot整合redis集群2.1 引入包2.2 设置配置2.3 使用…

C++服务器框架开发5——日志系统logAppender/IO类“3种stream”/双感叹号

该专栏记录了在学习一个开发项目的过程中遇到的疑惑和问题。 其教学视频见&#xff1a;[C高级教程]从零开始开发服务器框架(sylar) 上一篇&#xff1a;C服务器框架开发4——日志系统logger/.cpp与.cc C服务器框架开发5——日志系统logAppender/IO类“3种stream”/双感叹号 目前…

2022年天府杯全国大学生数学建模竞赛C题环境保护与绿色经济解题全过程文档及程序

2022年天府杯全国大学生数学建模竞赛 C题 环境保护与绿色经济 原题再现&#xff1a; “节能减排”和发展绿色经济是国家一项重大战略规划。“绿水青山就是金山银山”。环境的保护对国民经济的发展有着重要意义。随着工业化进程的加快&#xff0c;环境保护方面的问题已经刻不容…

ClickHouse进阶|如何自研一款企业级高性能网关组件?

使用原生ClickHouse集群进行节点数据查询和写入时&#xff0c;离不开第三方开源网关组件chproxy支持。但由于chproxy缺少TCP协议支持&#xff0c;导致性能、查询能力等受限。这也成为困扰众多ClickHouse开发者的一大难题。那么&#xff0c;究竟应该如何突破&#xff1f;本文将揭…

chatgpt赋能python:Python中撤销的快捷键

Python中撤销的快捷键 在编程中&#xff0c;我们经常需要进行调试&#xff0c;不可避免地会出现一些错误&#xff0c;这时候撤销 (Undo) 功能就显得尤为重要。在 Python 中&#xff0c;我们可以使用一些快捷键来快速撤销&#xff0c;本文将会介绍这些快捷键的使用以及使用它们…

chatgpt赋能python:Python中的字符提取:从基础到高级

Python中的字符提取&#xff1a;从基础到高级 在使用Python进行文本处理和数据挖掘时&#xff0c;我们经常需要从字符串中提取特定的字符或子串。本文将介绍Python中的常用字符串提取方法&#xff0c;包括基础的字符串操作、正则表达式和第三方库等高级方法。 基础字符串操作…

二叉树中堆的实现

完全二叉树 满二叉树&#xff1a;二叉树每个节点的度都达到最大值&#xff08;2&#xff09;&#xff0c;由此可有等比求和计算出节点总数&#xff1a;2^k-1 完全二叉树&#xff1a;除了最后一层。前面节点的度都满了&#xff0c;最后一层可以不满&#xff0c;但是必须从左至右…

用时序数据库 DolphinDB 实现地震波形的分析预警

1. 绪论 波形数据的存储与实时流处理是地震预警、地震速报、地震烈度速报、震源机制解等数字地震台网综合处理系统的前提&#xff0c;合理的存储方案与高效的实时流处理架构能极大地节约存储成本、降低响应延时、方便震源分析。 本篇教程会为有该方面需求的客户提供一个基于 …

如何在不丢失格式的情况下将 Excel 转换为 PDF?

Microsoft Excel 因其专业的数据或信息显示能力而被广泛采用。但是&#xff0c;它在兼容性上有一个恼人的缺点。 首先&#xff0c;Excel只能在Windows和MacOS上使用&#xff0c;Linux或其他操作系统的用户将无法使用&#xff1b;其次&#xff0c;即使您有一个可以打开和阅读 E…

PERMA幸福模型

PERMA幸福模型 由“积极心理学之父”马丁塞利格曼&#xff08;Martin Seligman&#xff09;在《持续的幸福 》一书中提出。 模型介绍 PERMA指的是创造充实、快乐和有意义的生活所必需的五大要素&#xff0c;它们是: 正向情绪Positive emotions 积极情绪是快乐人生的一个重要…

三种不同的存储芯片性能比较

为了进行性能比较&#xff0c;使用了三种不同的存储芯片&#xff0c;即Everspin EM064LX 64Mib STT‐MRAM、Micron MT25Q 128Mib NOR闪存和Micron MT29F 1Gib SLC NAND闪存。 该基准测试在STM32H755ZI上运行&#xff0c;Cortex‐M7内核的时钟频率为240MHz。Quad SPI总线用于1‐…

安泰功率放大器ATA-8202在EMC电磁兼容测试中的具体应用

作为电子及电器产品质量衡量指标之一的电磁兼容性&#xff08;EMC&#xff09;测试&#xff0c;它的测试正确与否直接关系到产品自身使用的可靠性及安全性&#xff0c;并且它还有可能对于同系统中的其他部分造成影响&#xff0c;不良的电磁兼容性会直接导致系统无法正常运转&am…

GIS数据转换器坐标生成功能

​很多时候我们会拿到一些没有坐标的图片或栅格数据&#xff0c;我们如何给它赋予坐标呢&#xff1f;下面介绍一种为这些数据生成坐标的方法。使用工具是GIS数据转换器-栅格-V4.0。 GIS数据转换器坐标生成功能 使用图片是这样的&#xff0c;网上找的不知道哪位大神画的三国时期…

【毕业季征文】追光人,终将光芒万丈!

追光人&#xff0c;终将光芒万丈&#xff01; 写在最前面最后从0到1 我的二进制探索之路一、从0到1&#xff0c;破茧成蝶二、从0到2n&#xff0c;全面发展三、从0到∞&#xff0c;逐光而行 参考 写在最前面 参与活动#毕业季征文|未来可期# 岁月不居&#xff0c;时节如流。转眼…

朋友轻松拿下字节27K的offer,羡慕了....

最近有朋友去字节面试&#xff0c;面试前后进行了20天左右&#xff0c;包含4轮电话面试、1轮笔试、1轮主管视频面试、1轮hr视频面试。 据他所说&#xff0c;80%的人都会栽在第一轮面试&#xff0c;要不是他面试前做足准备&#xff0c;估计都坚持不完后面几轮面试。 其实&…

C++ 范围for循环

1. 在C98中&#xff0c;不同的容器和数组&#xff0c;遍历的方法不尽相同&#xff0c;写法不统一&#xff0c;也不够简洁&#xff0c;而C11基于范围的 for循环以统一、简洁的方式来遍历容器和数组&#xff0c;用起来更方便了。 C 容器都有哪些 简单介绍&#xff1a; //STL C标…