2015-02-17 40 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