-
7-1 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입(3)Study(종료)/Kotlin 22.09.13 ~ 12.18 2022. 10. 30. 00:22
7장
7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (1) (7-1.1~ 7-1.4)7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (2) ( 7-1.5~ 7-1.7 )7-1. 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입 (3) ( 7-1.8~ 7-1.11 )
7-2. 컬렉션과 I/O 자세히 알아보기 : 파일과 I/O 스트림
7-1. 컬렉션
9) 변환
코틀린 표준 라이브러리는 컬렉션의 모든 원소를 주어진 큐직에 따라 변경한 뒤
정해진 방식으로 조합하여 새로운 컬렉션을 만들어내는 변환 함수를 제공한다.
이 함수는 mapping, flattening, association 세가지 유형으로 나눌 수 있다.
1) mapping
매핑 변환은 주어진 함수를 원본 컬렉션의 원소에 각각 적용한다. 그리고 적용한 결과는 새로운 컬렉션의 원소가 된다.
이 유형에 속하는 기본 함수는 map()이며, 모든 컬렉션 객체가 이 함수를 제공한다.
val list2 = listOf("a", "b", "c", "d") println(list2.map { it + it }) // [aa, bb, cc, dd]
변환 시 인덱스를 고려해야 하는 경우 mapIndexed() 함수를 사용할 수 있다.
맵 변환 후 not-null인 값만 선택해 사용하고 싶은 경우 mapNotNull() 함수를 사용할 수 있다.
2) flattening(평평하게 하기 라고 번역됨)
각각의 컬렉션을 이어 붙인 한 컬랙션을 반환하며 원소가 컬렉션인 모든 컬렉션에 적용할 수 있다.
val list1 = listOf(1, 2, 3, 4) println(listOf(list1).flatMap { it.asIterable() }) // [1, 2, 3, 4]
3) association(연관짓기 라고 번역됨)
컬렉션의 원소를 사용해 Key와 Value를 만들어낸다.
val list2 = listOf("apple", "banana", "car", "dinner") println(listOf(list2.associate { it to it.length })) // [{apple=5, banana=6, car=3, dinner=6}]
10) 하위 컬렉션 추출
- slice() / sliceArray()
- 리스트나 배열 원소를 정수 범위를 이용해 일부를 추출
- sliceArray()는 결과값이 배열로 반환
- take() / takeLast()
- 이터러블이나 배열에서 원소를 주어진 개수만큼 추출
- take()는 앞에서부터, takeLast()는 뒤에서부터 주어진 개수만큼 추출
- 조건식을 추가해 만족하는 원소만 추출 가능
- drop() / dropLast()
- take(), takeLast()를 반전시킨 연산
- 주어진 개수만큼 원소를 제외한 나머지 원소를 추출
- 조건식을 추가해 만족하는 원소만 추출 가능
11) 순서
컬렉션 원소를 정해진 순서에 따라 정렬(sorting)하는 함수가 들어 있다.
가장 간단한 형태는 sorted() 함수이며 비교 가능한 배열/이터러블/시퀸스에 적용할 수 있으며 오름차순으로 정렬한다.
내림차순으로 정렬하고 싶은 경우 sortedDescending() 함수를 사용한다.
val list1 = listOf(5, 2, 1, 3, 4) println(list1.sorted()) // [1, 2, 3, 4, 5] println(list1.sortedDescending()) // [5, 4, 3, 2, 1]
컬렉션 원소가 비교가 불가능해도 순서를 제공함으로써 sorted()를 대체할 수 있다.
sortedBy()나 sortedWith() 함수를 이용하면 비교가 불가능한 컬렉션을 정렬할 수 있다.
class Person( val firstName: String, val familyName: String, val age: Int ){ val fullName get() = "$firstName $familyName" override fun toString() = "$firstName $familyName : $age" } val FULL_NAME_COMPARATOR = kotlin.Comparator<Person>{ p1, p2 -> p1.fullName.compareTo(p2.fullName)} fun main(){ val persons = listOf( Person("Brook", "Hudson", 25), Person("Silver", "SonHud", 21), Person("Gold", "Han", 35), Person("Iron", "Kim", 20), ).sortedWith(FULL_NAME_COMPARATOR) println(persons) // [Brook Hudson : 25, Gold Han : 35, Iron Kim : 20, Silver SonHud : 21] }
다음글
7-2. 컬렉션과 I/O 자세히 알아보기 : 파일과 I/O 스트림
반응형'Study(종료) > Kotlin 22.09.13 ~ 12.18' 카테고리의 다른 글
8-1. 클래스 계층 이해하기 : 상속 (0) 2022.11.05 7-2 컬렉션과 I/O 자세히 알아보기 : 파일과 I/O 스트림 (0) 2022.10.30 7-1 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입(2) (0) 2022.10.29 7-1 컬렉션과 I/O 자세히 알아보기 : 컬렉션 타입(1) (0) 2022.10.28 6-3. 특별한 클래스 사용하기 : 인라인 클래스(값 클래스) (0) 2022.10.23 - slice() / sliceArray()