執行數據庫調用,結果是一串包含A
和B
類型的兩個字符串列的行。例如(x_a, y_b), (x_a, y1_b), (x2_a,y_b)
在while循環用完之前對內部列表進行排序(Java)
這個想法是想出一張地圖列表,如{(x_a,{y_b,y1_b}), (x2_a,{y_b})}
,其中類型A的對象不重複,並在從數據庫中提取結果時執行此操作。
這裏就是我想:當結果對象的最後TYPE1值相同
int i =0;
List<String> type2 = new ArrayList<String>();
Map<String,List<String>> type1_type2 = new HashMap<String,List<String>>();
List<Map> list_type1_type2 = new ArrayList<Map>();
String [] type1Array = new String[100];
String [] type2Array = new String[100];
int trackStart = 0;
while (res.next()){
String type1 = res.getString(1);
String type2 = res.getString(2);
type1Array[i]=type1;
type2Array[i] = type2;
if(i>0 && !type1Array[i].equals(type2Array[i-1])){
int trackStop = i;
for(int j = trackStart; j<trackStop;j++){
type2.add(type2Array[j]);
}
type1_type2.put(type1Array[i-1], type2);
list_type1_type2.add(type1_type2);
//debugging stuff
String x = list_type1_type2.toString();
System.out.println(x);
System.out.println(" printing because "+ type1Array[i]+" is not equal to " + type1Array[i-1]);
type2 = new ArrayList<String>();
type1_type2 = new HashMap<String,List<String>>();
trackStart=i;
}
i++;
}
這種方法是行不通的。
有沒有一種方法可以在沒有首先將數據庫調用的結果存儲在單獨的數組中或在while循環之外添加一個額外for循環來以相同的精神(在while(res.next)內)執行此操作以「patch它「?
Ugg確實很難讀取代碼。我會認真考慮重構以避免使用field1,field2等類型變量命名。它使事情變得非常難以遵循。其次,你是否研究過使用集合類代替數組是否可以更好地編寫代碼?它使事情變得簡單得多。 – drekka 2011-05-15 03:56:40
只是一個提示:當你需要嵌套Collection類時,通常表明你應該創建一個新的類來包含所有的東西,否則組織這個行爲將會變得非常單調乏味並且犯下愚蠢的錯誤。 – corsiKa 2011-05-15 04:01:32