2014-09-24 85 views
0

我的問題是我有一個函數接收一些ArrayList的,我想循環遍歷它們,但我不知道它們會有多少,它可以是任何數量的ArrayList的。循環遍歷Java中不同大小的幾個列表

此外,ArrayList有不同的大小,它們的大小也可以是任何東西。

我找不到有類似問題的人,我發現所有人都已經知道ArrayList的數量或ArrayList的大小。

只是爲了說明這一點,我將展示一種可能的情況:

class A{ 
     public ArrayList<String> chars = new ArrayList<>(); 
    } 

    class C{ 
     public ArrayList<A> A_objects = new ArrayList<>(); 
     public void print(){ 
      // Print all combinations of chars from the A_objects 
     } 
    } 

    A a1 = new A(); 
    A a2 = new A(); 

    a1.chars.add("x"); 
    a1.chars.add("y"); 

    a2.chars.add("X"); 
    a2.chars.add("Y"); 
    a2.chars.add("Z"); 

    C c1 = new C(); 
    c1.A_objects.add(a1); 
    c1.A_objects.add(a2); 
    c1.print(); 

我想要的是一種方法,通過ArrayList的,讓所有的組合是由循環。該功能將打印,例如:

xX xY xZ yX yY yZ 

注意打印功能不知道「A_objects」的大小,無論是「字符」的ArrayList的大小,但它必須通過他們循環反正。

有沒有辦法做到這一點?

謝謝大家的閱讀,我很抱歉如果我做錯了什麼,這只是我的第二個問題。

回答

0

我想你需要有某種合併方法。

爲了提高可讀性,我將刪除A和C類以僅使用列表。

List<String> merge(List<String> first, List<String> second) { 
    if(first.isEmpty()) {return second;} 
    if(second.isEmpty()) {return first;} 
    List<String> result = new ArrayList<>(); 
    for(String prefix : first) { 
     for(String suffix : second) { 
      result.add(prefix + suffix); 
     } 
    } 
    return result; 
} 

,現在有一個打印方法:

public void print() { 
    List<String> all = new ArrayList<>(); 
    for(A element : A_objects) { 
     all = merge(all, element.chars) 
    } 
    // now you just have to print 

} 

這是未經測試,但應該做的工作。

0

你會想要兩個嵌套循環。第一個依次獲取每個A,第二個獲取給定A的字符串列表中的每個字符串。對於每個循環而言,兩者的大小都不成問題。

public void print(){ 
    for(A a : A_objects){ 
     for(String s : a.chars){ 
      System.out.print(s); 
     } 
     System.out.print(" "); 
    } 
} 
+0

感謝您的回答,但我認爲這不完全是我需要的,我認爲這會打印'x y X Y Z'。 – luislhl 2014-09-24 15:57:47

+0

由於沒有任何空格,它會打印'xyXYZ'。如果你想要元素的空格,只需在第一個for循環之後添加一個print(「」)。我現在將它添加 – Mshnik 2014-09-24 15:59:28

+0

但我希望函數能夠在A_objects的字符之間進行所有組合,所以在本例中它會打印出'xX xY xZ yX yY yZ'。 – luislhl 2014-09-24 16:04:03

0

循環遍歷第一個數組列表,然後循環遍歷第二個數列列表的數組列表循環的每個元素。

例子:

for(A singlelist : arraylistoflists) 
{ 
    for(String element : singlelist.getYourArrayList()) 
    { 
     //processing here 
    } 
} 

這只是你將不得不修改使用你的類的實例。