2014-09-12 82 views
0

我现在有地方,使用JDBC,我倾倒的ResultSet成一个单一的ArrayList的情景:转换一维的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时清除一个临时的ArrayList。

+0

你可以使用'地图<字符串,列表>'。这将允许基于会话ID更容易的访问。 – Hannes 2014-09-12 18:36:08

回答

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 2014-09-12 18:36:43

+0

@ajb谢谢...只是手枪编码在这里....将编辑 – gtgaxiola 2014-09-12 18:37:07

0

如果我没有弄错,这里有一对多的关系。 您能检查Guava's multimap吗?