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

news/2024/10/30 23:20:00/

场景

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.ppmy.cn/news/118268.html

相关文章

java汽车的风挡玻璃_悄悄告诉你:擦拭风挡玻璃的内表面可防雾

冬季天气寒冷&#xff0c;致使燃油的流动性变差&#xff0c;润滑油的黏性增加&#xff0c;冷却水易冻结。因此&#xff0c;在冬季这样恶劣的条件下使用汽车&#xff0c;若方法不得当&#xff0c;会降低汽车使用寿命&#xff0c;甚至会发生事故。对此&#xff0c;专业技师对这个…

2021年全球与中国汽车和运输玻璃行业市场规模及销售渠道分析

2021年全球与中国汽车和运输玻璃行业市场规模及销售渠道分析 本报告研究全球与中国市场汽车和运输玻璃的发展现状及未来发展趋势&#xff0c;分别从生产和消费的角度分析汽车和运输玻璃的主要生产地区、主要消费地区以及主要的生产商。重点分析全球与中国市场的主要厂商产品特…

中国汽车零部件行业需求预测及投资前景建议报告2022-2028年版

中国汽车零部件行业需求预测及投资前景建议报告2022-2028年版 【报告目录】: 第一章 2019-2022年汽车工业发展概述 1.1 2019-2021年全球汽车工业整体分析 1.1.1 全球汽车产量分析 1.1.2 全球汽车销量分析 1.1.3 全球汽车品牌竞争 1.1.4 美国汽车市场分析 1.1.5 德…

为什么电源纹波那么大?

某用户在用500MHz带宽的示波器对其开关电源输出5V信号的纹波进行测试时&#xff0c;发现纹波和噪声的峰峰值达到了900多mV&#xff08;如下图所示&#xff09;&#xff0c;而其开关电源标称的纹波的峰峰值<20mv。虽然用户电路板上后级还有LDO对开关电源的这个输出再进行稳压…

汽车内外饰设计工程师是做什么的?有无发展前景-予菲汽车学习营分享

汽车内外饰设计工程师是做什么的&#xff1f;有无发展前景-予菲汽车学习营分享 汽车内外饰设计工程师是做什么的&#xff1f; 汽车内外饰设计工程师获取前人汽车内外饰设计工程经验系统总结。经常会碰到很多想从事汽车内外饰设计工作而不知怎么学习入门&#xff0c;或是已经在…

当软件定义汽车成为趋势,未来汽车是否可以理解为四个轮子上的超级计算机?

文章目录 浅谈汽车软件行业汽车软件的现状和发展方向本文首发于EE汽车荟&#xff0c;在微信公众号搜索“EE汽车荟”可以查看。简介&#xff1a;本文就目前比较热的“汽车软件”话题&#xff0c;做一些讨论。也试图回答大家比较关心的三个问题。内容主要有三方面&#xff1a;1&a…

汽车电子——常见的英文缩写(更新中)

目录 一、前言 二、Item缩写 三、部分item详解 一、前言 如今智能驾驶驾驶系统正高速发展&#xff0c;传感器据说会增长到上千个&#xff0c;域控制器的发展会简化ECU的数量&#xff0c;但是该有的传感器必不可少&#xff0c;了解它们是有必要的。 二、Item缩写 EZS-----点火…

2022-2028年中国汽车零部件行业市场研究及前瞻分析报告

【报告类型】产业研究 【报告价格】4500起 【出版时间】即时更新&#xff08;交付时间约3个工作日&#xff09; 【发布机构】智研瞻产业研究院 【报告格式】PDF版 本报告介绍了中国汽车零部件行业市场行业相关概述、中国汽车零部件行业市场行业运行环境、分析了中国汽车零…