본문으로 건너뛰기

컬렉션 작업 개요

Kotlin 표준 라이브러리는 컬렉션에 대한 연산을 수행하기 위한 광범위한 함수를 제공합니다. 여기에는 요소를 가져오거나 추가하는 것과 같은 간단한 연산과 검색, 정렬, 필터링, 변환 등과 같은 더 복잡한 연산이 포함됩니다.

확장 함수 및 멤버 함수

컬렉션 연산은 표준 라이브러리에서 컬렉션 인터페이스의 멤버 함수확장 함수의 두 가지 방식으로 선언됩니다.

멤버 함수는 컬렉션 유형에 필수적인 연산을 정의합니다. 예를 들어, Collection에는 비어 있는지 확인하는 함수인 isEmpty()가 포함되어 있고, List에는 요소에 대한 인덱스 액세스를 위한 get()이 포함되어 있습니다.

컬렉션 인터페이스의 자체 구현을 만들 때 멤버 함수를 구현해야 합니다. 새 구현을 더 쉽게 만들려면 표준 라이브러리의 컬렉션 인터페이스의 스켈레톤 구현인 AbstractCollection, AbstractList, AbstractSet, AbstractMap과 해당 변경 가능한 대응 항목을 사용하세요.

다른 컬렉션 연산은 확장 함수로 선언됩니다. 여기에는 필터링, 변환, 정렬 및 기타 컬렉션 처리 함수가 있습니다.

공통 연산

공통 연산은 읽기 전용 및 변경 가능한 컬렉션 모두에서 사용할 수 있습니다. 공통 연산은 다음 그룹으로 나뉩니다.

이러한 페이지에 설명된 연산은 원래 컬렉션에 영향을 주지 않고 결과를 반환합니다. 예를 들어, 필터링 연산은 필터링 조건과 일치하는 모든 요소를 포함하는 _새 컬렉션_을 생성합니다. 이러한 연산의 결과는 변수에 저장하거나 다른 방식으로 사용해야 합니다(예: 다른 함수에 전달).


fun main() {

val numbers = listOf("one", "two", "three", "four")
numbers.filter { it.length > 3 } // nothing happens with `numbers`, result is lost
println("numbers are still $numbers")
val longerThan3 = numbers.filter { it.length > 3 } // result is stored in `longerThan3`
println("numbers longer than 3 chars are $longerThan3")

}

특정 컬렉션 연산의 경우 대상 객체를 지정하는 옵션이 있습니다. 대상은 함수가 새 객체에서 결과를 반환하는 대신 결과 항목을 추가하는 변경 가능한 컬렉션입니다. 대상을 사용하여 연산을 수행하기 위해 이름에 To 접미사가 있는 별도의 함수가 있습니다(예: filter() 대신 filterTo() 또는 associate() 대신 associateTo()). 이러한 함수는 대상 컬렉션을 추가 매개변수로 사용합니다.


fun main() {

val numbers = listOf("one", "two", "three", "four")
val filterResults = mutableListOf<String>() //destination object
numbers.filterTo(filterResults) { it.length > 3 }
numbers.filterIndexedTo(filterResults) { index, _ `->` index == 0 }
println(filterResults) // contains results of both operations

}

편의를 위해 이러한 함수는 대상 컬렉션을 다시 반환하므로 함수 호출의 해당 인수에서 바로 만들 수 있습니다.


fun main() {
val numbers = listOf("one", "two", "three", "four")

// filter numbers right into a new hash set,
// thus eliminating duplicates in the result
val result = numbers.mapTo(HashSet()) { it.length }
println("distinct item lengths are $result")

}

대상 함수는 필터링, 연결, 그룹화, 평탄화 및 기타 연산에 사용할 수 있습니다. 전체 대상 연산 목록은 Kotlin 컬렉션 참조를 참조하세요.

쓰기 연산

변경 가능한 컬렉션의 경우 컬렉션 상태를 변경하는 _쓰기 연산_도 있습니다. 이러한 연산에는 요소 추가, 제거 및 업데이트가 포함됩니다. 쓰기 연산은 쓰기 연산목록 관련 연산맵 관련 연산의 해당 섹션에 나열되어 있습니다.

특정 연산의 경우 동일한 연산을 수행하기 위한 함수 쌍이 있습니다. 하나는 연산을 제자리에서 적용하고 다른 하나는 결과를 별도의 컬렉션으로 반환합니다. 예를 들어, sort()는 변경 가능한 컬렉션을 제자리에서 정렬하므로 해당 상태가 변경됩니다. sorted()는 정렬된 순서로 동일한 요소를 포함하는 새 컬렉션을 만듭니다.


fun main() {

val numbers = mutableListOf("one", "two", "three", "four")
val sortedNumbers = numbers.sorted()
println(numbers == sortedNumbers) // false
numbers.sort()
println(numbers == sortedNumbers) // true

}