Kotlin学习之常⽤⾼阶函数:filter
Kotlin⾼阶函数⼀般是数组、集合、序列等数据结构的扩展函数,接受⼀个操作函数对数据进⾏操作,在Kotlin函数式编程中占有重要的地位。⼀、filter系列
filter是“过滤器”的意思,Ktolin提供了多个相似的⾼阶函数。
这是扩展的filter函数,他接受⼀个<T> ->Boolean类型的函数,返回。但是它并不⾃⼰做操作,⽽是新建⼀个ArrayList作为操作⽬标,然后把这个ArrayList和传⼊函数打包送给filterTo函数处理:
filterTo()函数会遍历数组内的元素,验证每个元素是否符合predicate函数,如果符合就把它添加到⽬标集合
destinaton中,也就是说filter函数返回所有传⼊函数为true的元素。
与filter相似的还有以下⼏个:
filterNot()和filterNotTo():与filter相反,这两个函数会过滤出不符合条件的元素;
filterindexed()和filterindexedTo():这两个函数接受(Int,T)->Boolean类型的函数,同时检查索引和元素是否符合条件;
filterNotNull()和filterNotNullTo():这两个函数都能过滤出特定类型的元素,可以指定⼀个Class对象。
⼆、⽰例
filter过滤对象数组给⼀个长度为n的数组,每个元素都在[1,n]之间,要求出[1,n]中没有在数组⾥出现的元素。
代码如下:
解释:
⾸先定义⼀个长度为nums长度+1的Boolean数组ifAppear(BooleanArray与Java的boolean[]相同,默认值为false)
通过forEach()函数遍历传⼊数组,将ifAppear数组中下标等于nums元素的项设为true
使⽤mapIndexed()函数将ifAppear的元素映射到⼀个新的List⾥,如果index为0或者值为true,就映射为-1,否则映射为下标;最后⽤filter过滤出所有不为-1的元素,返回过滤后的List。
如果是使⽤Java,我们就需要两次for循环,分别遍历nums和ifAppear,⽽Kotlin通过函数式编程,把循环封装在⾼阶函数内部,这样即有利于简化代码,降低出错的概率,更利于多线程和实现。

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。