Kotlin基础 -- 变换函数、过滤函数、合并函数
变换函数
map
- map变换函数会遍历接收者集合,让变换器函数作用于集合里的各个函数,返回结果是包含已修改的集合,会作为链上下一个函数的输入
val fruits: List<String> = listOf("Apple", "Banana", "Orange", "Lemon") |
可以看到,原始集合并没有修改,map变换函数和你定义的变换器函数做完事情后,返回的是一个新集合,这样,变量就不用变来变去了。
- 事实上,函数式编程范式支持的设计理念就是不可变数据的副本在链上的函数间传递
map返回的集合中的元素个数
和输入集合必须一样,不过,返回的新集合里的元素可以是不同类型
的.
val lengthList = fruits.map { |
flatMap
- flatMap函数操作一个集合的集合,将其中
多个集合的元素合并
后返回一个包含所有元素的单一集合
val flatMap = listOf(listOf(1, 2, 3), listOf(4, 6, 5)).flatMap { it } |
过滤函数
过滤是函数式编程的第二大函数,过滤函数接收一个predicate函数,用它按给定条件检查接收者集合里的元素并给出true或false的判定。如果predicate函数返回true
,受检元素就会添加
到过滤函数返回的新集合里,如果predicate函数返回false
,那么受检元素就被移出
新集合
filter
过滤集合中含有“J”的元素
val result = listOf("Jack", "Lee", "Jim", "Jimy", "Tomas").filter { it.contains("J") } |
val items = listOf( |
找素数
val numbers = listOf(7,4,8,4,3,22,16,17,23,18,11,5,9,121,131) |
合并
zip
zip合并函数用来合并两个集合,返回一个包含键值对的新集合。
val employees = listOf("Jack", "Jason", "Tommy","Jimmy") |
通过对zip函数的定义
public infix fun <T, R> Iterable<T>.zip(other: Iterable<R>): List<Pair<T, R>> { |
可以看到,结果返回的是一个List集合,里面的值是键值对
为了方便使用,我们可以自定义一个zipMap
函数,直接将结果返回为Map
public infix fun <T, R> Iterable<T>.zipMap(other: Iterable<R>): Map<T, R> { |
用法也很简单:
val map = employees zipMap shirtSize |
fold
另一个可以用来合并至的合并类函数式fold
,这个合并函数接收一个初始累加器值,随后会根据匿名的结果更新
//将每个元素值乘以3后累加起来 |
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 码行!
评论
ValineDisqus