diff --git a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java index 2c25e7578..be0d52144 100644 --- a/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java +++ b/Plan/src/main/java/com/djrapitops/plan/system/database/databases/sql/tables/SessionsTable.java @@ -721,19 +721,32 @@ public class SessionsTable extends UserIDTable { * @param savedSessions Sessions of Player in a Server in the db. */ private void matchSessions(List sessions, List savedSessions) { - Map sessionsByStart = sessions.stream().collect(Collectors.toMap(Session::getSessionStart, Function.identity())); - Map savedSessionsByStart = savedSessions.stream().collect(Collectors.toMap(Session::getSessionStart, Function.identity())); - for (Map.Entry sessionEntry : sessionsByStart.entrySet()) { + Map> sessionsByStart = turnToMapByStart(sessions); + Map> savedSessionsByStart = turnToMapByStart(savedSessions); + + for (Map.Entry> sessionEntry : sessionsByStart.entrySet()) { long start = sessionEntry.getKey(); - Session savedSession = savedSessionsByStart.get(start); - if (savedSession == null) { + if (!savedSessionsByStart.containsKey(start)) { throw new IllegalStateException("Some of the sessions being matched were not saved."); } - Session session = sessionEntry.getValue(); - session.setSessionID(savedSession.getSessionID()); + Session savedSession = savedSessionsByStart.get(start).get(0); + sessionEntry.getValue().forEach( + session -> session.setSessionID(savedSession.getSessionID()) + ); } } + private Map> turnToMapByStart(List sessions) { + Map> sessionsByStart = new HashMap<>(); + for (Session session : sessions) { + long start = session.getSessionStart(); + List sorted = sessionsByStart.getOrDefault(start, new ArrayList<>()); + sorted.add(session); + sessionsByStart.put(start, sorted); + } + return sessionsByStart; + } + public void alterTableV15() { addColumns(Col.AFK_TIME + " bigint NOT NULL DEFAULT 0"); }