将一维ArrayList转换为二维

时间:2014-09-12 18:27:58

标签: java jdbc arraylist

我目前有一个场景,使用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时我就会清除它。

2 个答案:

答案 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吗?