kotlin语言因为追求代码简洁性,当然会支持函数式编程了。至于什么是函数式编程,有必要在这里引用几句话来稍微解释一下:
1、函数式编程是一种编程范式,我们常见的编程范式有命令式编程(Imperative programming),函数式编程,逻辑式编程,常见的面向对象编程是也是一种命令式编程。
2、函数式编程是面向数学的抽象,将计算描述为一种表达式求值,一句话,函数式程序就是一个表达式。
3、函数式编程关心类型(代数结构)之间的关系,命令式编程关心解决问题的步骤。
如果还是不太懂,推荐大家看看这个知乎问答,自己慢慢摸索理解:什么是函数式编程思维?
好了,回到今天的主体,kotlin中的filter函数。见词如意,filter这个单词大概就是筛选、过滤的意思,所以也可以把filter函数理解为一个可以用来做筛选的函数。它通常是用于将用户给定的筛选条件作用于集合,返回由原集合中符合条件的元素组合的一个子集。下面,我们来做个小需求 ,并且通过Java和kotlin两种代码,来更好的理解。
现在有这么个需求,要求在给定集合中,筛选出2的倍数,通常我们会这么做:
//Java 实现
int[] original = {1, 2, 3, 4, 5, 6, 7, 8, 9};
List newList = new ArrayList<>();
for (int a : original) {
if (a % 2 == 0) {
newList.add(a);
System.out.println(a);
}
}
输出结果就显而易见了:2,4,6,8。那如果我们用kotlin来实现,会是什么样呢:
// Kotlin 代码
val original = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
val newList = original.filter { it % 2 == 0 }
println(newList)
输出的结果也是一样的,可以看出,kotlin中的filter的作用主要是遍历原来的集合,然后筛选复合条件的元素,最后把这些元素重新组成一个集合返回了。
在kotlin中还有一些filter开头的类似函数:如filterIndexed、filterNot,下面也简单做个演示
filterIndexed
, 同 filter
,不过在逻辑判断的方法块中可以拿到当前item的indexfilterNot
,与filter
相反,只返回不符合条件的元素组合val original = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
val newList = original.filterIndexed {index, it-> it % 2 == 0 && index > 3 }
println(newList)
//输出结果:[6, 8]
val original = arrayOf(1, 2, 3, 4, 5, 6, 7, 8, 9)
val newList = original.filterNot { it % 2 == 0 }
println(newList)
//输出结果:[1, 3, 5, 7, 9]
filter还有很多其他函数,在进一步学习之后会更新,以上内容如有错误和遗漏,还请各位大神指正,定及时修正。