使用JDBC,我设法在数据库上运行查询并接收结果集(rs)。使用这些信息,我希望生成一个嵌套的数组列表。
// Created Array List
public static ArrayList<ArrayList<SessionRecord>> tempSessionOrg = new ArrayList<ArrayList<SessionRecord>>();
内部列表需要按第一列返回的信息进行分组。这就是我迄今为止所做的一切:
while(rs.next()) {
SessionRecord temp = new SessionRecord(rs.getString("SessionID"),rs.getString("NetworkAddress"),rs.getString("EventType"),rs.getString("Time"),rs.getString("Name"),rs.getString("SessionType"),rs.getString("ProcessType"));
}
我已经编写了一个非常相似的程序,除了它将结果集放在一个没有嵌套的ArrayList中。不幸的是,这段类似的代码并没有真正帮助我找到解决方案。
while(rs.next()) {
dbSession.add(new SessionRecord(rs.getString("name"),rs.getString("ParticipantName"),rs.getString("GuestLoggedOnUsername"),rs.getString("GuestMachineName"),rs.getString("inicio"),rs.getString("diferencia")));
}
有什么建议吗?
修改
此时,我有以下两个块一个代码。
一:
public static ArrayList<SessionRecord> singleSessionRecords = new ArrayList<SessionRecord>();
public static ArrayList<ArrayList<SessionRecord>> tempSessionOrg = new ArrayList<ArrayList<SessionRecord>>();
二:
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")));
}
Map<String, List<SessionRecord>> byID = singleSessionRecords.stream().collect(Collectors.groupingBy(SessionRecord::SessionID));
tempSessionOrg.add((ArrayList<SessionRecord>) Map.values());
我收到地图行的类型不匹配错误,并且我无法在最后一行中对非静态方法进行静态引用。这两个中的后一个对我来说很容易修复,但我不确定如何正确实现Map。
答案 0 :(得分:1)
您使用的是Java 8吗? 如果是这样,可以通过以下代码轻松实现:
Map<String, List<SessionRecord>> byName
= temp.stream()
.collect(Collectors.groupingBy(SessionRecord::name));
在此示例中,我按名称对sessionRecords进行分组,您可以轻松更改它以满足您的分组需求。