亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

將 ArrayList<ArrayList<Integer>> 轉換為 List<List

將 ArrayList<ArrayList<Integer>> 轉換為 List<List

aluckdog 2021-06-07 17:41:45
我在工作中做了一些編碼挑戰,我們需要執行相當多的業務邏輯,從而生成一個整數列表列表。我在 ArrayList of Integers 的 ArrayList 中有所需的信息,但永遠無法弄清楚如何將其轉換為正確的返回類型。在鍵入時使用 T 或 Object 也有許多變化。我搜索過堆棧溢出,有很多類似的問題,但沒有一個給我一個直接的答案;它們更具概念性。要回答的問題:輸出必須是一個    List<List<Integer>> (not negotiable). 給定一個現有的:    ArrayList<ArrayList<Integer>> **currentArrayList** HOW do you convert that to a List<List<Integer>>. 我不再需要代碼,但它會讓我發瘋,因為它能夠完成所有的邏輯而不是簡單的類型轉換。List<List<Integer>> returnList(){    ArrayList<ArrayList<Integer>> currentArrayList = new ArrayList<ArrayList<Integer>>();    ArrayList<Integer> innerList = new ArrayList<Integer>();    innerList.add(new Integer(123));    currentArrayList.add(innerList);    List<List<Integer>> newList = ????    // ??Logic to copy over currentArrayList into newList???    return newList;} 
查看完整描述

3 回答

?
慕碼人2483693

TA貢獻1860條經驗 獲得超9個贊

您應該針對接口工作并刪除具體的實現細節。在您的示例中,請改用對的引用List<List<Integer>,因為您可以向其添加任何List實現,包括您的ArrayList.


public List<List<Integer>> returnList(){

    List<List<Integer>> currentList = new ArrayList<>();

    List<Integer> innerList = new ArrayList<>();

    innerList.add(123);

    currentList.add(innerList);

    return currentList;

}

如果您需要返回一個 new List,只需將其包裝成另一個:


return new ArrayList<>(currentList);

或者,使返回的List不可修改:


return Collections.unmodifiableList(currentList);

編輯


如果你真的堅持使用,ArrayList你可以將它轉換為Listwith


return (List) currentArrayList;

此強制轉換會引發編譯器警告,但您可以忽略它,@SuppressWarnings("unchecked")因為您知道返回了正確的類型。


查看完整回答
反對 回復 2021-06-10
?
jeck貓

TA貢獻1909條經驗 獲得超7個贊

只需像這樣更改聲明類型,因為ArrayListextends from AbstractListwhich implements List:


List<List<Integer>> returnList(){

    List<List<Integer>> currentArrayList = new ArrayList<>();

    List<Integer> innerList = new ArrayList<>();

    innerList.add(new Integer(123));

    currentArrayList.add(innerList);

    return currentArrayList;

}


查看完整回答
反對 回復 2021-06-10
?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

正如其他人提到的,編程到接口。

您的單線解決方案是:

List<List<Integer>> newList = Collections.unmodifiableList(currentArrayList);

但這有一個明顯的缺點:
你不能向它添加新元素。

如果你考慮一下,這是有道理的。
雖然你可以添加LinkedList<Integer>List<List<Integer>>,你不能添加LinkedList<Integer>List<ArrayList<Integer>>。

如果您需要修改列表的能力,那么您可以創建一個新列表:

List<List<Integer>> newList = new ArrayList<>(currentArrayList);

這意味著復制外部列表。

最后一個解決方案您不應該采用,并且正在使用原始類型:

List<List<Integer>> newList = (List) currentArrayList;

雖然這會編譯,但如果有人將例如 a 添加LinkedList<Integer>到該列表中,它可能會在稍后中斷,而您仍然希望該列表中的每個元素都是一個ArrayList<Integer>


查看完整回答
反對 回復 2021-06-10
  • 3 回答
  • 0 關注
  • 429 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號