2014-09-12 3 views
0

я в настоящее время есть сценарий, где, используя JDBC, я дамп ResultSet в один ArrayList:Преобразование One-Dimensional ArrayList в двух измерениях

while(rs.next()) { 
      singleSessionRecords.add(new SessionRecord(rs.getString("SessionID"),rs.getString("NetworkAddress"),rs.getString("EventType"),rs.getString("Time"),rs.getString("Name"),rs.getString("SessionType"),rs.getString("ProcessType"))); 
     } 

Эта часть подтверждается работать. Однако для упрощения манипулирования мне нужно изменить этот размер и поместить его в двумерный массив ArrayList. Ключ здесь в том, что мне нужно, чтобы второе измерение было разделено на SessionRecord.SessionID. Пример:

groupedSessionRecords (Outer ArrayList) 
    SessionID 1 (Inner ArrayList) 
     Session Record 1 
     Session Record 2 
     Session Record 3 
    SessionID 2 (Inner ArrayList) 
     Session Record 4 
     Session Record 5 
     Session Record 6 

Он продолжается в этом формате, но с различным количеством записей на SessionID. Есть ли простой, элегантный способ достичь этого? Моя единственная идея состоит в том, чтобы перебрать всю существующую ArrayList с временным, который я очищаю каждый раз, когда я достигаю нового SessionID.

+0

Вы можете использовать 'Map >'. Это позволит упростить доступ на основе идентификатора сеанса. – Hannes

ответ

1

Почему бы не реализовать его как Map<String,List<SessionRecord>>?

SessionID становится ключом

Тогда:

String key = rs.getString("SessionID"); 
List<SessionRecord> myList = map.get(key); 
if(myList == null) { 
    myList = new ArrayList<>(); 
    myList.add(new SessionRecord(rs.getString("SessionID"),rs.getString("NetworkAddress"),rs.getString("EventType"),rs.getString("Time"),rs.getString("Name"),rs.getString("SessionType"),rs.getString("ProcessType"))); 
    map.put(key,myList); 
} else { 
    myList.add(new SessionRecord(rs.getString("SessionID"),rs.getString("NetworkAddress"),rs.getString("EventType"),rs.getString("Time"),rs.getString("Name"),rs.getString("SessionType"),rs.getString("ProcessType"))); 
} 
+1

Вам не нужно 'map.put', за исключением случая, когда вы создаете новый, так как' myList' является ссылкой и не изменится, если он уже существует. – ajb

+0

@ajb спасибо ... просто пистолет-кодирование здесь .... будет редактировать – gtgaxiola

0

Если я не ошибаюсь, здесь есть отношения «один ко многим». Вы можете проверить Guava's multimap?

Смежные вопросы