일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- ML
- map
- Android
- 웹크롤러
- package
- animation
- 코틀린
- 크롤러
- variable
- 클래스
- crawler
- 콜렉션
- 다트
- textstyle
- 플러터
- Class
- function
- set
- Collection
- text
- import
- kotlin
- python
- 함수
- 파이썬
- List
- DART
- pushnamed
- Flutter
- Yocto
- Today
- Total
조용한 담장
코틀린(Kotlin) Collections : Operations Overview 본문
코틀린의 operation 에 대해 살펴보자.
원문 https://kotlinlang.org/docs/reference/collection-operations.html 을 보며 정리.
standard library 에 정의된 collection operation 은 collection interface 의 member functions 와 extension functions 로 되어 있다.
member functions 은 isEmpty(), get() 같은 collection type 의 필수적인 동작이 구현되어 있다.
자신의 collection interface 를 구현하고자 한다면 member function 은 반드시 구현해야 한다.
쉬운 방법은 collection interface 의 골격이 되는 클래스로 부터 구현하면 되는데, AbstractCollection, AbstractList, AbstractSet, AbstractMap 와 mutable 에 해당하는 클래스들 같은 것들이다.
extension functions 으로는 filtering, transformation, ordering 등이 구현되어 있다.
Common operations
공통 동작은 read-only 와 mutable collection 에 모두 적용된다.
- Transformations
- Filtering
- plus and minus operators
- Grouping
- Retrieving collection parts
- Retrieving single elements
- Ordering
- Aggregate operations
collection 의 값에 영향을 주지 않고 결과를 리턴하는 동작들 이다.
동자의 결과는 변수에 저장되거나 다른 방식으로 쓰여야 한다.
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")
특정 동작의 경우 destination object 를 지정할 수 있는 옵션이 있다.
destination 은 새로운 object 로 결과를 리턴하는 대신 결과 아이템을 추가할수 있는 mutable collection 이다.
To 를 postfix 로 가진 함수로 구분할 수 있는데, filter() 대신 filterTo() 또는 associate() 대신 associateTo() 들이 있다.
이런 함수들은 destination collection 을 추가적인 파라미터로 받는다.
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
// output:
// [three, four, one]
편의를 위해 이런 함수들은 destination collection 을 다시 리턴하는데, 이를통해 함수 호출문의 argument 에서 바로 생성하는 방법으로 사용할 수 있다.
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")
// output:
// distinct item lengths are [3, 4, 5]
destination 을 가지는 함수들은 filtering, association, grouping, flattening 등등 에서 사용 가능하다.
Write operations
mutable collection 은 collection state 를 변경하는 write 동작들을 가지고 있다.
adding, removing, updating 이 해당된다.
특정 동작을 위해 같은 동작을 수행하기 위한 함수 페어가 있다.
하나는 해당 위치에서 수행되고 다른것은 다른 collection 으로 결과를 리턴한다.
예를 들어 sort() 는 mutable collection 을 그 자리에서 정렬하고 state 가 변한다.
sorted() 는 정렬된 순서의 결과를 가진 새로운 collection 을 생성한다.
val numbers = mutableListOf("one", "two", "three", "four")
val sortedNumbers = numbers.sorted()
println(numbers == sortedNumbers) // false
numbers.sort()
println(numbers == sortedNumbers) // true
'kotlin' 카테고리의 다른 글
코틀린(Kotlin) Collections : Filtering (0) | 2020.03.24 |
---|---|
코틀린(Kotlin) Collections : Transformations (0) | 2020.03.18 |
코틀린(Kotlin) Collections : 시퀀스(sequences) (0) | 2020.01.02 |
코틀린(Kotlin) Collections : Ranges and Progressions (0) | 2020.01.02 |
코틀린(Kotlin) Collections : Iterators (0) | 2020.01.02 |