map
函数
public inline fun <T, R> Array<out T>.map(transform: (T) -> R): List<R> {
return mapTo(ArrayList<R>(size), transform)
}
public inline fun <T, R, C : MutableCollection<in R>> Array<out T>.mapTo(destination: C, transform: (T) -> R): C {
for (item in this) {
destination.add(transform(item))
}
return destination
}
- 函数调用过程:
- 泛型
Array
来调用map
内置函数,将一个泛型 Array
转换为泛型 List
,并在转换过程中对每个元素应用一个变换函数 transform
- 创建一个同样
Size
大小的ArrayList
,和变换函数transform
一起传给mapTo
函数,将泛型 Array
每个元素应用transform
函数后添加到destination
集合中,并返回
minOf
函数
public inline fun <T> Iterable<T>.minOf(selector: (T) -> Float): Float {
val iterator = iterator()
if (!iterator.hasNext()) throw NoSuchElementException()
var minValue = selector(iterator.next())
while (iterator.hasNext()) {
val v = selector(iterator.next())
minValue = minOf(minValue, v)
}
return minValue
}
public inline fun <T> Iterable<T>.maxOf(selector: (T) -> Float): Float {
val iterator = iterator()
if (!iterator.hasNext()) throw NoSuchElementException()
var maxValue = selector(iterator.next())
while (iterator.hasNext()) {
val v = selector(iterator.next())
maxValue = maxOf(maxValue, v)
}
return maxValue
}
- 函数调用过程
Iterable<T>
的子类来调用minOf
函数或者maxOf
函数,返回一个Float
类型的最小值或者最大值- 拿到当前
Iterable<T>
的子类的迭代器对象,遍历每个元素 - 每个函数传入给变换函数
selector
,在selector
的lambda
表达式最后一行返回Float
类型的数值,此时maxValue
为初始最小值/最大值(并不是最终的最小值/最大值),因为还没有开始轮询元素进行比较 - 所有元素轮询比较完成后,返回最终的最小值/最大值