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]
        }

运行结果 :

image

三,例子

代码:

        //处理按钮点击事件
        binding.button2.setOnClickListener {
            // 过滤 接收者集合 中 含有字母 "J" 的字符串元素
            val hasJCharacter = listOf("Tom", "Jerry", "Jack")
                .filter { it.contains("J") }

            println(hasJCharacter)
        }

运行结果 :

image

四,例子

代码:

        //处理按钮点击事件
        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)
        }

运行结果 :

image

五,例子

代码:


        //处理按钮点击事件
        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)
        }

运行结果 :

image

 

posted @ 2025-08-16 08:10  刘宏缔的架构森林  阅读(34)  评论(0)    收藏  举报