Algus

lists

Lists hold an ordered collection of values and allow duplicate values.

val gamesQueue: List<String> = listOf("FF3", "FF4", "FF6")
gamesQueue[0] // "FF3"
gamesQueue.get(0) // "FF3"

gamesQueue.first() // "FF3"
gamesQueue.last() // "FF6"

gamesQueue.get(3) // `ArrayIndexOutOfBoundsException`
gamesQueue.getOrElse(3) { "No more games" }
gamesQueue.getOrNull(3) ?: "No more games"

if(gamesQueue.contains("Castlevania")){
	"Ah, I See You're a Man of Culture As Well"
}

💡 Lists are read-only, meaning it doesn’t allow to change its content.

Mutate a list

A MutableList is a type used for creating a list that can be modified.

val gamesQueue = mutableListOf("FF3", "FF4", "FF6")
gamesQueue.remove("FF4") // ["FF3", "FF6"]
gamesQueue.add("Castlevania") // ["FF3", "FF6", "Castlevania"]
gamesQueue[0] = "Megaman 1"

gamesQueue.add("Castlevania") // ["FF3", "FF6", "Castlevania", "Castlevania"]
gamesQueue.distinct() // ["FF3", "FF6", "Castlevania"]

val readOnlyQueue = gamesQueue.toList() // List<gamesQueue>
readOnlyQueue.toMutableList() // MutableList<gamesQueue>

Iteration

for(game in gamesQueue){
	println("$game is in the list")
}

// using .forEach Iterable
gamesQueue.forEach { println("$it is in the list") }

// using .forEachIndexed Iterable
gamesQueue.forEachIndexed {
	idx, game -> println("$idx: $game")
}

Destructuring

import java.io.File

// games.txt have the following data per line
// title, console, year
val gamesData = File("data/games.txt")  
	.readText().split("\n")

val gameItems = List(gamesData.size) { idx ->
	val (title, console, year) = gamesData[idx].split(",")
	// ^ We can omit elements with an `_` => `val (_, console, _)`
	console
}

println(gameItems) // List<String>