Kotlin의 associate 메서드를 사용한다. 일단 사용 예시부터 보자.
val list = listOf<Int>(1, 2, 3)
val exp1 = list.associateWith { "value" } // [1:value, 2:value, 3:value]
val exp2 = list.associateBy { "key" } // [key: 1, key: 2. key: 3] -> [key: 3] 이 됨
val exp3 = list.associateBy { it } // [1: 1, 2: 2, 3: 3]
val exp4 = list.associateBy({ it }, { "숫자$it" }) // [1: 숫자1, 2: 숫자2, 3: 숫자3]
1. associateWith ( valueSelector )
key = 리스트에 있던 값, value = 사용자가 만들어낸 값
리스트의 값을 그대로 Key로 사용할 때 사용한다. valueSelector로는 람다함수를 넘길 수 있다. 반환타입은 자유다.
exp1에서 { "value" }가 (Unit) -> Strin 타입의 람다함수여서 value 값이 모두 고정되었다.
원한다면 아래와 같이 key 값을 사용해서 value를 구성할 수 있다
list.associateWith { "숫자$it" } // [1: 숫자1, 2: 숫자2, 3: 숫자3]
2. associateBy ( keyselector )
key = 사용자가 만들어낸 값, value = 리스트에 있던 값
리스트의 값을 value로 가지게 하고싶을 때 사용한다. keySelector로는 람다함수를 넘길 수 있다.
list.associateBy { "key" } // [key: 1, key: 2. key: 3] -> [key: 3] 이 됨
map 자료형은 키값의 중복을 허용하지 않으므로 위 코드에서는 계속 value 값만 갱신되어서 맵의 크기가 1이 되었다.
list.associateBy { it } // [1: 1, 2: 2, 3: 3]
valueSelector와 마찬가지로 keySelector의 반환타입도 자유이며, 람다함수에 리스트의 원래 값을 사용할 수 있다.
3. associateBy ( keySelector, valueSelector )
key = 사용자가 만들어낸 값, value = 사용자가 만들어낸 값
리스트의 값에서 각각 key와 value를 만들어내서 넣어줄 때 사용한다. 위 함수와 이름이 같다(오버로딩됨)
list.associateBy({ it }, { "숫자$it" })
keySelector 람다함수와 valueSelector 람다함수를 둘 다 넣어서 사용할 수 있다.
val list = listOf(User("kim", 25), User("lee", 27))
list.associateBy({ it.name }, { it.age })
위 예시처럼 복잡한 객체를 맵으로 만들 때 사용하면 좋다.
Map을 정렬하고싶을 때는 LinkedHashMap을 사용하자.
'프로그래밍 언어 > Kotlin' 카테고리의 다른 글
Kotlin의 ArrayDequeue : Stack & Queue를 손쉽게 사용하기 (1) | 2023.01.06 |
---|---|
Kotlin의 시간계산 : LocalDate, LocalDateTime, Duration (0) | 2022.11.27 |
java.io.File 사용법 (0) | 2022.11.06 |
Kotlin Collection 변환 함수 모음 (0) | 2022.10.29 |
IntelliJ에서 만들 수 있는 코틀린 프로젝트의 종류 (0) | 2022.10.29 |