kotlin Collection vs Sequense
Android2020. 5. 15. 19:36
Collection과 Sequence는 둘다 lambda의 확장함수( map, filter, find... )를 사용하여 원하는 결과를 찾아나갈 수 있습니다.
그런데 Collection의 확장함수를 사용하면, inline function을 통해서 매번 결과가 새롭게 만들어 집니다.
public inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {
return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)
}
하지만 Sequence는 inline function이 아닌 chain call 을 통해서 결과를 이어 나갈 수 있습니다.
public fun <T, R> Sequence<T>.map(transform: (T) -> R): Sequence<R> {
return TransformingSequence(this, transform)
}
같은 결과이지만, 중간 과정에서 결과를 보면,
val items = mutableListOf(1, 2, 3, 4, 5)
val result = items.map {
it * it
}.filter {
it % 2 == 0
}
map에서 새로운 1,4,9,16,25 가 만들어진 뒤, filter에서 새로운 4, 16의 결과만 만들지게 됩니다.
하지만 sequence는,
val items = mutableListOf(1, 2, 3, 4, 5)
val result = items.asSequence().map {
it * it
}.filter {
it % 2 == 0
}.toList()
1,1,2,4,3,9,4,16,5,25 의 순서로, 새로운 결과를 만들어지는게 아니라, 하나씩 확인을 해갑니다.
Collection에서 새로운 결과를 계속 만들다 보면 memory사용도 많아지게 되지만, Sequence로 하게 되면, 메모리 문제는 Collection보다는 덜 하게 됩니다.
'Android' 카테고리의 다른 글
Kotlin collection 에서 item들의 sum 계산. (0) | 2020.07.11 |
---|---|
kotlin 코드 실행시간 측정하기. (0) | 2020.05.17 |
goodbye? onActivityResult... (0) | 2020.05.14 |
kotlin file read... (0) | 2019.04.17 |
UnknownServiceException: CLEARTEXT communication to not permitted by network security policy (0) | 2019.02.26 |