我目前有一个场景,使用JDBC,我将ResultSet转储到单个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循环遍历现有的ArrayList,每当我到达一个新的SessionID时我就会清除它。
答案 0 :(得分: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 :(得分:0)
如果我没有弄错的话,这里有一对多的关系。 你能查一下Guava's multimap吗?