Java之HashMap.values()转List时的错误和正确演示

 更新时间:2023年03月22日 09:25:29   作者:Archie_java  
这篇文章主要介绍了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());
    }
}

总结

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。

相关文章

  • SpringMVC接收多个对象的4种方法

    SpringMVC接收多个对象的4种方法

    这篇文章主要为大家详细介绍了SpringMVC接收多个对象的4种方法,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-01-01
  • webuploader在springMVC+jquery+Java开发环境下的大文件分片上传的实例代码

    webuploader在springMVC+jquery+Java开发环境下的大文件分片上传的实例代码

    这篇文章主要介绍了webuploader在springMVC+jquery+Java开发环境下的大文件分片上传的实例代码,需要的朋友可以参考下
    2017-04-04
  • SpringCloud中Gateway实现鉴权的方法

    SpringCloud中Gateway实现鉴权的方法

    本文主要介绍了SpringCloud中Gateway实现鉴权的方法,文中通过示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11
  • Java的String类中的startsWith方法和endsWith方法示例详解

    Java的String类中的startsWith方法和endsWith方法示例详解

    大家应该都知道startsWith()方法用于检测字符串是否以指定的前缀开始,endsWith()方法用于测试字符串是否以指定的后缀结束,本文就Java的String类中的startsWith方法和endsWith方法给大家详细讲解,感兴趣的朋友一起看看吧
    2023-11-11
  • 详解Spring Boot 定制HTTP消息转换器

    详解Spring Boot 定制HTTP消息转换器

    本篇文章主要介绍了详解Spring Boot 定制HTTP消息转换器,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-11-11
  • Spring Boot高可用限流三种实现解决方案

    Spring Boot高可用限流三种实现解决方案

    限流是对某一时间窗口内的请求数进行限制,保持系统的可用性和稳定性,本文就介绍了Spring Boot高可用限流三种实现解决方案,具有一定的参考价值,感兴趣的可以了解一下
    2023-08-08
  • HashMap底层实现原理详解

    HashMap底层实现原理详解

    这篇文章主要介绍了HashMap底层实现原理详解,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-02-02
  • Java如何实现N叉树数据结构

    Java如何实现N叉树数据结构

    这篇文章主要介绍了Java如何实现N叉树数据结构问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 浅谈Java中的n种随机数产生办法

    浅谈Java中的n种随机数产生办法

    众所周知,随机数是任何一种编程语言最基本的特征之一。而生成随机数的基本方式也是相同的:产生一个0到1之间的随机数。看似简单,但有时我们也会忽略了一些有趣的功能。
    2015-09-09
  • java如何发送get请求获取数据(附代码)

    java如何发送get请求获取数据(附代码)

    这篇文章主要给大家介绍了关于java如何发送get请求获取数据的相关资料,Java中的GET请求方法是HTTP协议中的一种请求方式,用于向服务器请求获取资源,需要的朋友可以参考下
    2023-10-10

最新评论