2015-02-17 69 views
1

我試圖合併這兩個循環在一起,以便我可以使用它的一個fillview。Android的Java使兩個相似的循環成一個循環

我一直試圖嘗試幾天,但我不確定如何做到這一點,所以將不勝感激一些幫助!

任何幫助表示讚賞

int maxDataSetSize = Math.max(data1.size(), Math.max(data2.size(), data3.size())) ; 

    for (int i = 0; i < maxDataSetSize; i++) { 
     String dataset1Value = data1.size() > i ? data1.get(i) : null; 
     String dataset2Value = data2.size() > i ? data2.get(i) : null; 
     String dataset3Value = data3.size() > i ? data3.get(i) : null; 

     View statsRowview = getLayoutInflater().inflate(R.layout.stats_row, null); 

     fillView(statsRowview, dataset1Value, dataset2Value, dataset3Value); 

     tableStats.addView(statsRowview); 
    } 


    int maxDataSetSize2 = Math.max(data4.size(), Math.max(data5.size(), data6.size())); 
    for (int i = 0; i < maxDataSetSize2; i++) { 
     String dataset4Value = data4.size() > i ? data4.get(i) : DEFAULT_COLOR; 
     String dataset5Value = data5.size() > i ? data5.get(i) : DEFAULT_COLOR; 
     String dataset6Value = data6.size() > i ? data6.get(i) : DEFAULT_COLOR; 

     View statsRowview = getLayoutInflater().inflate(R.layout.stats_row, null); 

     fillView2(statsRowview, dataset4Value, dataset5Value, dataset6Value); 

     tableStats.addView(statsRowview); 
    } 
} 
+1

您的循環讀取不同的數據,調用不同的填充方法,並將遍歷其代碼的次數不同。爲什麼你要嘗試合併它們? – azurefrog 2015-02-17 22:36:54

+0

至於發生了什麼是這個http://puu.sh/fMfrt/03a298d2ee.png,但我想如果我合併它,它會像這樣:http://puu.sh/fMfxx/bb5389687f.png – user3411002 2015-02-17 22:38:30

+0

我可以理解統一控制代碼的感覺很自然。但是大多數情況下,java中沒有好的方法可以做到這一點。它沒有需要的宏或類似的構造(所以你只能使用像visitor,iterator或streams())這樣的模式。在具體的例子中,我認爲在循環結構中有合理的少量控制代碼。 – eckes 2015-02-18 01:12:40

回答

2

試試這個:

int maxDataSetSize = Math.max(data1.size(), Math.max(data2.size(), data3.size())) ; 
int maxDataSetSize2 = Math.max(data4.size(), Math.max(data5.size(), data6.size())); 

for (int i = 0, j = 0; i < maxDataSetSize || j < maxDataSetSize2; i++, j++) { 

    View statsRowview = getLayoutInflater().inflate(R.layout.stats_row, null); 

    if(i < maxDataSetSize){ 
     String dataset1Value = data1.size() > i ? data1.get(i) : null; 
     String dataset2Value = data2.size() > i ? data2.get(i) : null; 
     String dataset3Value = data3.size() > i ? data3.get(i) : null; 
     fillView(statsRowview, dataset1Value, dataset2Value, dataset3Value); 
    } 


    if(j < maxDataSetSize2){ 
     String dataset4Value = data4.size() > j ? data4.get(j) : DEFAULT_COLOR; 
     String dataset5Value = data5.size() > j ? data5.get(j) : DEFAULT_COLOR; 
     String dataset6Value = data6.size() > j ? data6.get(j) : DEFAULT_COLOR; 
     fillView2(statsRowview, dataset4Value, dataset5Value, dataset6Value); 
    } 

    tableStats.addView(statsRowview); 
} 

這應該工作。

+0

錯誤解決:) – user3411002 2015-02-17 22:51:23

+1

我想你可以調用相同的fillView方法兩次,假設參數是相同的數據類型 – 2015-02-17 22:53:14

+0

其實,你已經解決了我所有的問題,哈哈欠你一個!歡呼聲 – user3411002 2015-02-17 22:53:19