2010-08-26 50 views
0

我想知道是否有更好的方法来设计循环。正如你看到的函数1和函数2有几乎相似的代码期望获得哈希映射。更好的设计循环方式

**当前码1 **

//Field 
ResultSet rs = null; 
HashMap<Object, Object> hashMap1; 
HashMap<Object, Object> hashMap2; 



if(somecondition) 
{ 
    function1() 
} 
else 
{ 
    function2(); 
} 

void function1() 
{ 
    while(rs.next) 
    { 
     hashMap1 = someClass.getData1(); 
     hashMap2 = someClass.getData2(); 
     // compareHashMap 
    } 

} 

void function2() 
{ 
    while(rs.next) 
    { 
     hashMap1 = someClass.getModfiedData1(); 
     hashMap2 = someClass.getModfiedData2(); 
     // compareHashMap 
    } 
} 

另一路(短小精悍)2

while(rs.next) 
{ 
    if(somecondition) 
    { 
     hashMap1 = someClass.getData1(); 
     hashMap2 = someClass.getData2(); 
    } 
    else 
    { 
     hashMap1 = someClass.getModfiedData1(); 
     hashMap2 = someClass.getModfiedData2(); 
    } 
    // compareHashMap 
} 

问题:

如果有10000条记录以上在DB中与1一起使用会更好吗?

是否有任何替代设计或我去与否2?

感谢

+1

为什么不只是测试它? – 2010-08-26 02:16:25

+0

这些类型的操作通常与'filter','transform','zip','reduce'等操作相关。番石榴实现了其中的大部分操作,生成的代码看起来相当漂亮。 – polygenelubricants 2010-08-26 02:33:21

回答

3

那么在第一个例子,你检查的条件一次,然后遍历N个记录。在示例2中,您正在遍历N个记录以及执行N个条件检查。如果这是每个记录需要检查的条件,那么第二个循环就是要使用的循环。否则,如果它是一个条件,只需要检查一次...为什么添加不需要的开销检查条件N次?

2

我想一个简单的方法是使“somecondition”您在SomeClass的设置属性,然后有你打电话getthe数据的单一方法。喜欢的东西

someClass.someCondition = somecondition 

while(rs.next) 
{ 
    hashMap1 = someClass.getMyData1(); 
    hashMap2 = someClass.getMyData2(); 
} 

或者,您可以将变量传递到函数

while(rs.next) 
{ 
    hashMap1 = someClass.getMyData1(somecondition); 
    hashMap2 = someClass.getMyData2(somecondition); 
}