2012-05-26 138 views

回答

4
final String[][] r = new String[childrenSuperList.size()][]; 
int i = 0; 
for (ArrayList<String> l : childrenSuperList) 
    r[i++] = l.toArray(new String[l.size()]); 
+0

爲什麼不使用'對(INT I = 0; I

+2

@NikitaBeloglazov模擬?我**在源'ArrayList'上迭代**,並追蹤目標數組中的索引。這是最短和最乾淨的代碼。爲什麼我想用醜陋的'childrenSuperList.get(i)'代替? –

+0

我只是覺得索引是錯誤的,這個逃逸的循環可以在循環之外訪問。在for(int i'''')循環中,我們將列表的第i個元素設置爲數組的第i個元素將更加明顯。是的,它更加冗長,但我認爲在某些方面它更清晰。 –

0

二維數組列表有有字符串數組從ArrayList中的方法:

ArrayList listArray = new ArrayList(); 

listArray.add("One"); 
listArray.add("Two"); 
listArray.add("Three"); 

String []strArray = new String[3]; 
listArray.toArray(strArray); 
0

以下代碼將幫助您獲得完美的完整結果。

public static void main(String[] args) { 

    ArrayList<ArrayList<String>> val = new ArrayList<ArrayList<String>>(); 
    int arraySize = 0; 
    int upperSize = 0; 

    if (val != null) { 
     ArrayList<String> arrayList = val.get(0); 
     upperSize = val.size(); 
     if (arrayList != null) { 
      arraySize = arrayList.size(); 
     } 
    } 

    int i = 0, j = 0; 
    String[][] values = new String[upperSize][arraySize]; 
    if (val != null) { 
     for (ArrayList<String> curr : val) { 
      if (curr != null) { 
       for (String currValue : curr) { 
        values[i][j++] = currValue; 
       } 
       i++; 
      } 
     } 
    } 

} 
+0

這個假定所有的內部列表都是相同的大小,這可能不是真的。 –

+0

@Paul在這個問題上,它沒有明確提及關於這一點,因此我做了這個。 –

+1

@BhavikAmbani這似乎是一個非常大的假設,t帽子幾乎肯定會變成錯誤的。如果能夠在不這樣做的情況下解決問題是可能的,那麼編寫代碼依賴於真實是很愚蠢的。 –

2

您的列表可以有不同的大小,所以表不會有固定的大小,但這是沒有問題的。

ArrayList<ArrayList<String>> childrenSuperList = new ArrayList<ArrayList<String>>(); 
// put some data 
ArrayList<String> a = new ArrayList<>(); 
a.add("a1"); 
a.add("a2"); 
ArrayList<String> b = new ArrayList<>(); 
b.add("b1"); 
b.add("b2"); 
b.add("b3"); 

childrenSuperList.add(a); 
childrenSuperList.add(b); 

// you need to know sizes of array 
String[][] array = new String[childrenSuperList.size()][]; 
int i = 0, j = 0; 
for (ArrayList<String> row : childrenSuperList) { 
    array[i] = new String[row.size()]; 
    j = 0; 
    for (String str : row) { 
     array[i][j] = str; 
     j++; 
    } 
    i++; 
} 
System.out.println(Arrays.deepToString(array)); 
+0

此代碼可能會拋出'NullPointerException'。 –

+0

什麼時候可以拋出'NullPointerException'?我知道'childrenSuperList'被初始化了。即使列表爲空也沒關係。 – Pshemo

+0

我認爲*他說'childrenSuperList'可能包含'null'元素,這是一個極端的IMO。你的回答對我來說似乎很好。 –

0
import java.util.*; 

公共類的HelloWorld {

public static void main(String []args){ 

    ArrayList<ArrayList<String>> parentList = new ArrayList<ArrayList<String>>(); 

    ArrayList<String> list=new ArrayList<String>(); 
    list.add("Joshan Stethem"); 
    list.add("Bruce Wills"); 
    list.add("Tom Cruse"); 
    list.add("Optimus Prime"); 
    System.out.println("Array List Hollywood : "+list); 
    ArrayList<String> list1=new ArrayList<String>(); 
    list1.add("Salman Khan"); 
    list1.add("Shahrukh Khan"); 
    list1.add("AMir Khan"); 
    list1.add("Fawad Khan"); 
    System.out.println("Array List Bollywood : "+list1); 
     ArrayList<String> list2=new ArrayList<String>(); 
    list2.add("Rahat Fateh"); 
    list2.add("Arijit Singh"); 
    list2.add("KK"); 
    list2.add("Ankit Tiwari"); 
    System.out.println("Array List Singers : "+list2); 
    parentList.add(list); 
    parentList.add(list1); 
    parentList.add(list2); 

String[][] twodimArray = new String[parentList.size()][]; 
    int i = 0, j = 0; 
for (ArrayList<String> row : parentList) { 
    twodimArray[i] = new String[row.size()]; 
    j = 0; 
    for (String str : row) { 
     twodimArray[i][j] = str; 
     j++; 
     } 
     i++; 
     } 
System.out.println("List of Artist : "+Arrays.deepToString(twodimArray)); 
    } 

}

相關問題