Выполнен вызов базы данных, и результатом является набор строк из двух строковых столбцов типа A
и B
. например (x_a, y_b), (x_a, y1_b), (x2_a,y_b)
Идея состоит в том, чтобы составить список карт типа {(x_a,{y_b,y1_b}), (x2_a,{y_b})}
, где объекты типа A не повторяются, и сделать это при извлечении результатов из базы данных.
Вот что я попробовал:
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++;
}
Этот метод не работает, если последние значения type1 объекта результата совпадают.
Есть ли способ сделать это в том же духе (в рамках while (res.next)) без предварительного сохранения результатов вызова базы данных в отдельных массивах или добавления дополнительного цикла for вне цикла while для «исправления» вверх "?