val currentTime = Instant.now() val groupedByTime = games.groupBy { val gameStart = Instant.parse(it.date_with_time) val gameEnd = gameStart.plus(it.duration_in_seconds.toLong(), ChronoUnit.SECONDS) when { currentTime.isAfter(gameEnd) -> "PAST" currentTime.isBefore(gameStart) -> "UPCOMING" else -> "HAPPENING" } } val (past, upcoming, happening) = listOf( groupedByTime.getOrElse("PAST", { emptyList() }), groupedByTime.getOrElse("UPCOMING", { emptyList() }), groupedByTime.getOrElse("HAPPENING", { emptyList() }) ) val sortedGames = upcoming + happening + past.reversed()