Понятие коллекции

val boys = 
    listOf("Sheldon", "Leonard", "Howard", "Raj")
val girls = 
    listOf("Penny", "Amy", "Bernadette")

Хук для печати

operator fun Any?.unaryPlus() =
    this.apply { println(this) }
    
+boys
+girls
[Sheldon, Leonard, Howard, Raj]
[Penny, Amy, Bernadette]

Коллекция List

val boys: List<String> = 
    listOf("Sheldon", "Leonard", "Howard", "Raj")
val girls: List<String> = 
    listOf("Penny", "Amy", "Bernadette")

Доступ к элементам коллекции

val sheldon = +boys[0]
val leonard = +boys.get(1)
val unknown = +boys.getOrNull(4)
val default = +boys.getOrElse(5) { "Default" }
Sheldon
Leonard
null
Default

Изменение элементов коллекции коллекции

val names = ArrayList<String>()
names.add("Leonard")
names[0] = "Sheldon"
+names
[Sheldon]

Операции над коллекциями

val names = boys + girls
public operator fun <T> Collection<T>.plus(
    elements: Iterable<T>
): List<T> {
...
    val result = ArrayList<T>(this.size + elements.size)
    result.addAll(this)
    result.addAll(elements)
    return result

Функция map

val students: List<Student> =
    names
        .map {
            Student(it)
        }
class Student(
    val name: String
){
    override fun toString() = name
}

Функция map

public inline fun <T, R> Iterable<T>.map(
    transform: (T) -> R
): List<R> {
    return mapTo(
        ArrayList<R>(collectionSizeOrDefault(10)), 
        transform
    )
}

Функция mapTo

public inline fun <T, R, C : MutableCollection< in R >> 
    Iterable<T>.mapTo(destination: C, transform: (T) -> R): C {
        for (item in this)
            destination.add(transform(item))
        return destination
    }

Обработка массивов

val students = Array(names.size){Student()}
for (i in 0 until names.size)
    students[i]=Student(names[i])
val students = ArrayList< Student >()
for (n in names)
    students.add(Student(n))
val students = names
    .map { Student(it) }