温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Java之HashMap.values()转List时错误怎么解决

发布时间:2023-03-22 11:16:37 来源:亿速云 阅读:81 作者:iii 栏目:开发技术

这篇文章主要介绍“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

Java之HashMap.values()转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;

测试通过~

Java之HashMap.values()转List时错误怎么解决

发现还有一种方法也可以解决这个问题:

 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时错误怎么解决”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI