Java之HashMap.values()转List时的错误和正确演示
HashMap.values()转List时的错误和正确演示
因为项目中需要获取到Map的值的集合,所以调用了HashMap.values()方法转成List,当时是使用了以下代码。
(逻辑上这样想应该没问题,但生活总是会是不是给你一点小“”惊喜“”)
List<AreaItemOpt> areaItemOpts = (List<AreaItemOpt>) areaItemOptMap.values(); return areaItemOpts;
怀着喜悦的心情在测试环境中运行之后,它报错了!
报错如下:
java.lang.ClassCastException: java.util.HashMap$Values cannot be cast to java.util.List

错误原因
于是翻了一下values()方法的源码
public Collection<V> values() {
Collection<V> vs = values;
return (vs != null ? vs : (values = new Values()));
}
原来values()方法只是返回了一个Collection集合,可是如程序中的用法所示,在向下转型的时候出现了类型转换错误。
解决方法
在ArrayList中,有一个构造函数
public ArrayList(Collection<? extends E> c) {
elementData = c.toArray();
if ((size = elementData.length) != 0) {
// c.toArray might (incorrectly) not return Object[] (see 6260652)
if (elementData.getClass() != Object[].class)
elementData = Arrays.copyOf(elementData, size, Object[].class);
} else {
// replace with empty array.
this.elementData = EMPTY_ELEMENTDATA;
}
}
可以接受一个集合类型的参数,然后返回一个list;这样就达到了预期目的。
代码如下:
List<AreaItemOpt> areaItemOpts = new ArrayList<>(areaItemOptMap.values()); return areaItemOpts;
测试通过~

发现还有一种方法也可以解决这个问题:
List<T> list=(List<T>) Arrays.asList(map.values().toArray());//先转数组再转list
Map的Value值转换为List集合
不多废话,直接看代码,有注解
public class Map转List {
public static void main(String[] args) {
//开辟空间
HashMap<Integer,String> hashMap = new HashMap<Integer,String>();
//存入数据
hashMap.put(1,"张三");
hashMap.put(2,"李四");
hashMap.put(3,"王五");
//使用Collection类型接收HashMap的Value值
Collection<String> collection = hashMap.values();
//把Collection对象作为参数传入ArrayList构造方法完成类型转换
ArrayList<String> arrayList = new ArrayList<String>(collection);
//输出测试
System.out.println(arrayList.toString());
}
}总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。
相关文章
java的springboot实现将base64编码转换pdf
在Spring Boot中,将Base64编码的字符串转换为PDF文件并导出到客户端,通常涉及几个步骤:首先将Base64字符串解码为字节数组,然后使用这些字节数据来创建PDF文件,并最终通过HTTP响应将其发送给客户端2024-08-08
java并发编程专题(十一)----(JUC原子类)数组类型详解
这篇文章主要介绍了JAVA JUC原子类 数组类型详解的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下2020-07-07
springMVC如何将controller中Model数据传递到jsp页面
本篇文章主要介绍了springMVC如何将controller中Model数据传递到jsp页面,具有一定的参考价值,有兴趣的可以了解一下2017-07-07
java基于servlet使用组件smartUpload实现文件上传
这篇文章主要介绍了java基于servlet使用组件smartUpload实现文件上传,具有一定的参考价值,感兴趣的小伙伴们可以参考一下2016-10-10
Spring Security异步无法获取用户认证信息的解决方法
最近使用 Springboot 中 @Async 注解异步调用方法时,发现无法获取到用户认证信息,本文小编给大家介绍了Spring Security异步无法获取用户认证信息的原因和解决方法,并通过代码示例介绍的非常详细,需要的朋友可以参考下2024-09-09
Java实现用Freemarker完美导出word文档(带图片)
这篇文章主要介绍了Java实现用Freemarker完美导出word文档(带图片),具有一定的参考价值,感兴趣的小伙伴们可以参考一下2017-07-07


最新评论