您好,登錄后才能下訂單哦!
這篇文章主要介紹“Java之HashMap.values()轉List時錯誤怎么解決”,在日常操作中,相信很多人在Java之HashMap.values()轉List時錯誤怎么解決問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Java之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
不多廢話,直接看代碼,有注解
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時錯誤怎么解決”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。