kotlin: filter函数
一,功能:
过滤函数 是 函数式编程 中的函数类型 , 一般该类型函数 接收一个 Predicate 谓词函数 作为参数 ;
该 谓词函数 参数 是一个 Lambda 表达式 / 匿名函数 / 闭包 ; ( 三者是同一个概念 )
过滤函数 的 接收者 是一个 集合 , 也就是说 过滤函数 要从 接收者集合 中 过滤掉一些元素 , 生成一个 新的集合 ;
谓词函数 主要是 按照一定的逻辑条件 , 判断 接收者集合 中的元素 是否符合某种条件 , 如果符合返回 true , 不符合条件返回 false ;
- 谓词函数 返回 true , 将该元素添加到新的集合中 ;
- 谓词函数 返回 false , 该函数不能被添加到新的集合中 ;
注意 : 过滤函数 会返回一个新的集合 , 原来的接收者集合不会发生改变 ;
二,例子
代码:
//处理按钮点击事件
binding.button1.setOnClickListener {
val arr = intArrayOf(1, 2, 4, 6, 10, 39, 39, 18, 88)
val newArr = arr.filter { it % 2 == 0 }
println(arr.contentToString()) //[1, 2, 4, 6, 10, 39, 39, 18, 88]
println(newArr) //[2, 4, 6, 10, 18, 88]
}
运行结果 :
![]()
三,例子
代码:
//处理按钮点击事件
binding.button2.setOnClickListener {
// 过滤 接收者集合 中 含有字母 "J" 的字符串元素
val hasJCharacter = listOf("Tom", "Jerry", "Jack")
.filter { it.contains("J") }
println(hasJCharacter)
}
运行结果 :
![]()
四,例子
代码:
//处理按钮点击事件
binding.button3.setOnClickListener {
// 过滤 接收者集合 中 含有字母 "J" 的字符串元素
val origList = listOf(listOf("Tom", "Jerry", "Jack"), listOf("Julia", "June", "John"))
val hasJCharacter = origList.flatMap { it.filter { it.contains("J") } }
println(origList)
println(hasJCharacter)
}
运行结果 :
![]()
五,例子
代码:
//处理按钮点击事件
binding.button4.setOnClickListener {
// 找出 2 到 10 之间的 质数
// 质数只有 1 和 其本身 可以被其整除
val numbers = listOf(2, 3, 4, 5, 6, 7, 8, 9, 10)
val primeNumbers = numbers.filter { number ->
// number 参数是被遍历的 接收者集合 的 受检元素
// 符合下面的要求 才会被放入新集合
// 遍历时每个 受检元素 都要 被 [2..number - 1] 区间的数值进行遍历
(2..number - 1)
// 计算 number 与 [2..number - 1] 区间中的数值 相除的 余数
// 也就是验证 是否 只有 1 和 其本身 可以被其整除
.map { number % it }
// 通过 map 变换计算出的余数
// 不能出现 余数 为 0 的情况
// 一旦出现 就返回 false
.none{it == 0}
}
println(primeNumbers)
}
运行结果 :
![]()
浙公网安备 33010602011771号