Java之HashMap.values()转List时错误怎么解决
这篇文章主要介绍“Java之HashMap.values()转List时错误怎么解决”,在日常操作中,相信很多人在Java之HashMap.values()转List时错误怎么解决问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”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之HashMap.values()转List时错误怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341