Android kotlin函数式编程之filter浅显理解

    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的index
  • filterNot,与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还有很多其他函数,在进一步学习之后会更新,以上内容如有错误和遗漏,还请各位大神指正,定及时修正。

你可能感兴趣的:(kotlin,Android,kotlin,filter,函数式编程,filterIndexed)