drop 과 반대의 역할. drop 이 앞에서 부터 n 개를 떨어뜨린 값을 준다면, take 는 앞에서 부터 n 개를 취한 값을 준다
public fun Iterable<T>.take(n: Int): List<T> {
require(n >= 0) { "Requested element count $n is less than zero." }
if (n == 0) return emptyList()
if (this is Collection<T>) {
if (n >= size) return toList()
if (n == 1) return listOf(first())
}
var count = 0
val list = ArrayList<T>()
for (item in this) {
if (count++ == n)
break
list.add(item)
}
return list.optimizeReadOnlyList()
}
val list = listOf(1, 2, 3, 4, 5)
println(list.take(3)) // [1, 2, 3]