Kotlin Standart Library는 많은 함수를 제공합니다. 이런 함수들은 다음 두 가지 방법을 통해 작업을 수행할 수 있습니다.
이 두 가지 컨테이너 타입에 대해 공부해볼게용
위에서 본 차이점들 때문에 당연히 내부구현도 다르게 되어있겠죠? 간단히 살펴보겠습니다.
/**
* Returns a list containing the results of applying the given [transform] function
* to each element in the original collection.
*/
public inline fun <T, R> Iterable<T>.map(transform: (T) -> R): List<R> {
return mapTo(ArrayList<R>(collectionSizeOrDefault(10)), transform)
}
/**
* Returns a sequence containing the results of applying the given [transform] function
* to each element in the original sequence.
*
* The operation is _intermediate_ and _stateless_.
*/
public fun <T, R> Sequence<T>.map(transform: (T) -> R): Sequence<R> {
return TransformingSequence(this, transform)
}
/**
* A sequence which returns the results of applying the given [transformer] function to the values
* in the underlying [sequence].
*/
internal class TransformingSequence<T, R>
constructor(private val sequence: Sequence<T>, private val transformer: (T) -> R) : Sequence<R> {
override fun iterator(): Iterator<R> = object : Iterator<R> {
val iterator = sequence.iterator()
override fun next(): R {
return transformer(iterator.next())
}
...
}
...
}
이번 글은 여기까지 적도록 하고 실제로 동작하는 방법, 그 동작으로 갖게 되는 Sequence의 장점 등은 다음 글에 마저 적도록 하겠습니다!