Kotlin에서 목록을 지도로 변환
- 코틀린 프로젝트 생성
-
associate()
메서드를 사용하여 Kotlin에서 목록을 지도로 변환 -
associateBy()
메서드를 사용하여 Kotlin에서 목록을 지도로 변환 -
associateWith()
메서드를 사용하여 Kotlin에서 목록을 지도로 변환 -
groupBy()
메서드를 사용하여 Kotlin에서 목록을 지도로 변환 - 결론
Kotlin은 다양한 컬렉션을 제공합니다. 가장 일반적인 것은 List
, Map
및 Set
입니다. 애플리케이션을 개발할 때 특정 목표를 달성하기 위해 한 유형의 컬렉션을 다른 유형으로 변환해야 하는 상황이 있습니다.
예를 들어, 중복 요소가 포함된 목록이 있을 수 있으며 세트는 중복 요소를 허용하지 않는다는 것을 알고 있습니다. 목록을 집합으로 변환할 수 있으며 논리를 작성하지 않고 중복 항목이 제거됩니다.
Kotlin을 사용하면 컬렉션에서 다른 유형의 컬렉션으로 변환하는 데 사용할 수 있는 다양한 메서드를 제공하여 이러한 작업을 수행할 수 있습니다.
이 자습서에서는 List 데이터 구조를 Map 데이터 구조로 변환하는 데 활용할 수 있는 다양한 방법을 배웁니다.
코틀린 프로젝트 생성
IntelliJ를 열고 새로 만들기 > 파일> 프로젝트
를 선택합니다. 열리는 창에서 프로젝트 이름을 list-to-map
으로 입력하고 Language 섹션에서 Kotlin
을 선택하고 Build System 섹션에서 IntelliJ
를 선택합니다.
마지막으로 Create
버튼을 눌러 Kotlin 프로젝트를 생성합니다. kotlin
폴더 아래에 Main.kt
파일을 만들고 다음 코드를 복사하여 파일에 붙여넣습니다.
data class Employee(val id: Number,
val firstName: String,
val email: String);
fun fetchEmployees(): List<Employee> {
return listOf(
Employee(1,"john", "john@gmail.com"),
Employee(2,"mary","mary@gmail.com"),
Employee(3,"jane","jane@gmail.com"),
Employee(3,"abdul","abdul@gmail.com")
);
}
이 예제에서는 fetchEmployees()
메서드에서 직원 목록 List<Employee>
을 만드는 데 도움이 되는 Employee
라는 데이터 클래스
를 만들었습니다.
이 자습서에서 다룰 모든 예제에서 fetchEmployees()
메서드를 사용합니다.
associate()
메서드를 사용하여 Kotlin에서 목록을 지도로 변환
다음 코드를 복사하여 fetchEmployees()
함수 뒤에 Main.kt
파일에 붙여넣습니다.
fun usingAssociate(employees: List<Employee>): Map<Number, String> {
return employees.associate { employee ->
Pair(employee.id, employee.email)
}
}
fun main(){
println(usingAssociate(fetchEmployees()));
}
이 예에서는 employee.id
를 키로 포함하고 employee.email
을 문자열 Map<Number, String>
으로 포함하는 맵으로 목록을 변환했습니다. 맵의 삽입 순서는 목록에 있던 대로 유지됩니다.
associate()
메서드는 목록 요소에서 변환 함수를 사용하여 쌍을 만들고 이 쌍을 맵으로 반환하는 Iterable
인터페이스의 확장 함수입니다.
생성된 쌍의 키와 값 모두로 반환하려는 값을 명시적으로 제공했습니다. 쌍의 키가 복제되면 이전 쌍이 새 쌍으로 대체됩니다.
예를 들어 목록에 동일한 id가 3
인 두 개의 개체가 있는데 첫 번째는 jane
이고 두 번째는 abdul
입니다. 요소가 지도에 삽입되면 jane
이 abdul
로 대체됩니다.
위의 코드를 실행하고 출력이 아래와 같은지 확인합니다.
{1=john@gmail.com, 2=mary@gmail.com, 3=abdul@gmail.com}
associateBy()
메서드를 사용하여 Kotlin에서 목록을 지도로 변환
이전 예제를 주석 처리하고 주석 뒤에 다음 코드를 복사하여 Main.kt
파일에 붙여넣습니다.
fun usingAssociateBy(employees: List<Employee>): Map<Number, Employee> {
return employees.associateBy { employee: Employee ->
employee.id
}
}
fun main(){
println(usingAssociateBy(fetchEmployees()));
}
이 예제에서는 employee.id
를 키로 포함하는 맵으로 목록을 변환했으며 직원 개체의 값은 Map<Number, Employee>
입니다.
associateBy()
메서드는 Iterable
인터페이스의 확장 기능이기도 합니다. 맵에서 키로 사용되는 값만 전달하면 됩니다.
keySelector
기능은 목록의 각 개체에서 이 키를 가져와 지도에 적용합니다. 맵의 값은 목록의 객체가 됩니다.
keySelector
함수는 위에서 본 것처럼 값이 3
인 두 개의 복제본을 검색합니다. 이전 요소는 새 요소로 대체됩니다.
이 코드를 실행하고 출력이 아래와 같은지 확인합니다.
{1=Employee(id=1, firstName=john, email=john@gmail.com),
2=Employee(id=2, firstName=mary, email=mary@gmail.com),
3=Employee(id=3, firstName=abdul, email=abdul@gmail.com)}
associateWith()
메서드를 사용하여 Kotlin에서 목록을 지도로 변환
이전 예제를 주석 처리하고 주석 뒤에 다음 코드를 복사하여 Main.kt
파일에 붙여넣습니다.
fun usingAssociateWith(employees: List<Employee>): Map<Employee, Number> {
return employees.associateWith { employee ->
employee.id
}
}
fun main(){
println(usingAssociateWith(fetchEmployees()));
}
이 예제에서는 직원 개체를 키로 포함하고 employee.id
를 Map<Employee, Number>
값으로 포함하는 맵으로 목록을 변환했습니다.
associateWith()
메서드는 Iterable
인터페이스의 확장 함수이며 맵에서 값으로 사용할 요소만 전달하면 됩니다. valueSelector
기능은 목록의 각 개체에서 값을 가져와 맵에 적용합니다.
맵의 키는 목록의 요소가 됩니다. 개체는 맵의 키이므로 중복 항목이 없지만 맵의 두 요소는 3
값을 갖습니다.
이 코드를 실행하고 출력이 아래와 같은지 확인합니다.
{Employee(id=1, firstName=john, email=john@gmail.com)=1,
Employee(id=2, firstName=mary, email=mary@gmail.com)=2,
Employee(id=3, firstName=jane, email=jane@gmail.com)=3,
Employee(id=3, firstName=abdul, email=abdul@gmail.com)=3}
groupBy()
메서드를 사용하여 Kotlin에서 목록을 지도로 변환
이전 예제를 주석 처리하고 주석 뒤에 다음 코드를 복사하여 Main.kt
파일에 붙여넣습니다.
fun usingGroupBy(employees: List<Employee>): Map<Number, List<Employee>> {
return employees.groupBy { employee: Employee ->
employee.id
}
}
fun main(){
println(usingGroupBy(fetchEmployees()));
}
첫 번째 예에서 목록을 맵으로 변환할 때 모든 중복 항목이 대체되는 것을 확인했습니다. 중복을 유지하려는 상황에서는 groupBy()
메서드를 사용합니다.
이 예제에서는 목록을 employee.id
로 키를 포함하는 맵으로 변환했으며 값은 Map<Number, List<Employee>>
ID로 그룹화된 직원 개체 목록입니다.
groupBy()
메서드는 Iterable
인터페이스의 확장 함수이기도 하며 맵에서 키로 사용되는 값만 전달하면 됩니다. 이 메서드의 keySelector
기능은 목록의 각 개체에서 키를 가져와 지도에 적용합니다.
동일한 ID를 가진 개체는 하나의 목록으로 그룹화됩니다. 이 코드를 실행하고 출력이 아래와 같은지 확인하십시오.
{1=[Employee(id=1, firstName=john, email=john@gmail.com)],
2=[Employee(id=2, firstName=mary, email=mary@gmail.com)],
3=[Employee(id=3, firstName=jane, email=jane@gmail.com),
Employee(id=3, firstName=abdul, email=abdul@gmail.com)]}
결론
이 튜토리얼에서는 Iterable
인터페이스의 다양한 확장 기능을 활용하여 목록을 맵으로 변환하는 방법을 배웠습니다. 우리가 다룬 메서드에는 associate()
메서드, associateBy()
메서드, associateWith()
메서드 및 groupBy()
메서드 사용이 포함됩니다.
groupingBy()
및 groupByTo()
와 같이 사용할 수 있는 다른 그룹화 전략이 있습니다.
David is a back end developer with a major in computer science. He loves to solve problems using technology, learning new things, and making new friends. David is currently a technical writer who enjoys making hard concepts easier for other developers to understand and his work has been published on multiple sites.
LinkedIn GitHub