Kotlin은 풍부한 컬렉션 API를 제공합니다. 이 포스트에서는 배열, 리스트, 맵의 사용법을 알아봅니다.

Array (배열)

선언

val arr = arrayOf(1, 2, 3)
val list = listOf(1, 2, 3)
arrayOfNulls<String>(10)  // 고정 크기의 null 배열

// 람다로 초기화
val asc = Array(5) { i -> (i * i).toString() }

프로퍼티

args.size          // 크기
args.indices       // 인덱스 리스트 (0..size-1)
args.lastIndex     // 마지막 인덱스
args.fill(value)   // 특정 값으로 채우기

인덱스로 순회

for (index in items.indices) {
    println("item at $index is ${items[index]}")
}

포함 여부 확인

if ("aaa" in array) {
    // 배열에 "aaa"가 있음
}

합계

args.sum()

List (리스트)

선언

listOf("apple", "banana", "kiwi")  // 불변 리스트
mutableListOf(1, 2, 3)              // 가변 리스트

Map (맵)

선언

val map = mapOf("a" to 1, "b" to 2, "c" to 3)  // read-only
val mutableMap = mutableMapOf("a" to 1, "b" to 2)

접근

println(map["key"])
mutableMap["key"] = value

순회

for ((k, v) in map) {
    println("$k -> $v")
}

Destructuring

map.mapValues { (key, value) -> "$value!" }

// 타입 지정
map.mapValues { (_, value): Map.Entry<Int, String> -> "$value!" }
map.mapValues { (_, value: String) -> "$value!" }

람다 연산

기본 람다 사용

it으로 현재 아이템을 참조합니다.

fruits
    .filter { it.startsWith("a") }
    .sortedBy { it }
    .map { it.toUpperCase() }
    .forEach { println(it) }

filter

조건에 맞는 요소만 필터링합니다.

args = args.filter { it.startsWith("a") }

// null 제외
val nullableList: List<Int?> = listOf(1, 2, null, 4)
val intList: List<Int> = nullableList.filterNotNull()

sort

정렬합니다.

args = args.sortedBy { it }

map

각 요소를 변환합니다.

val lengths = names.map { it.length }

forEach

각 요소에 대해 작업을 수행합니다.

items.forEach { println(it) }

인덱스와 함께

for ((index, value) in array.withIndex()) {
    println("the element at $index is $value")
}

Sequence

지연 계산을 위한 시퀀스를 사용할 수 있습니다.

val fibonacciSeries = sequence {
    var a = 0
    var b = 1
    yield(a)
    yield(b)

    while (true) {
        val c = a + b
        yield(c)
        a = b
        b = c
    }
}

println(fibonacciSeries.take(10).joinToString(","))

다음 단계

Kotlin 컬렉션에 대해 알아보았습니다. 이로써 Kotlin의 핵심 기능들을 모두 살펴보았습니다!