开发者

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

开发者 https://www.devze.com 2023-03-22 10:48 出处:网络 作者: Archie_java
目录HashMap.values()转List时的错误和正确演示错误原因解决方法Map的Value值转换为List集合总结HashMap.values()转List时的错误和正确演示
目录
  • HashMap.values()转List时的错误和正确演示
    • 错误原因
    • 解决方法
  • Map的Value值转换为List集合
    • 总结

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

      因为项目中需要获取到Map的值的集合,所以调用了HashMap.values()方法转成List,当时是使用了以下代码。

      (逻辑上这样想应该没问题www.devze.com,但生活总是会是不是给你一点小“”惊喜“”)

      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 = elemenpythontData.length) != 0) {
                  // c.toArray might (i开发者_Python教程ncorrectly) not return Object[] (see 6260652)
                  if (elementData.getClass() != Object[].class)
                      elementData = Arrays.copyOf(elementData, size, Object[].class);
              } else {
                  // replace with empty array.
                  this.elementData =js EMPTY_ELEMENTDATA;
              }
          }
      

      可以接受一个集合类型的参数,然后返回一个list;这样就达到了预期目的。

      代码如下:

      List<AreaItemOpt> areaItemOpts = new Arrhttp://www.devze.comayList<>(areaItemOptMap.values());
      return areaItemOpts;
      

      测试通过~

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

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

       List<T> list=(List<T>) Arrays.asList(map.values().toArray());//先转数组再转list
      

      Map的Value值转换为Lisjavascriptt集合

      不多废话,直接看代码,有注解

      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());
        }
      }

      总结

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

      0

      精彩评论

      暂无评论...
      验证码 换一张
      取 消

      关注公众号