Kotlin输入字母J时filter过滤结果为[]的原因及filter机制解析
问题分析:输入"J"时Kotlin代码输出空数组的原因及filter工作机制
一、输出空数组的原因
核心问题是类型不匹配导致equals比较失败:
var letter = readLine()!![0]从输入中取出第一个字符,返回的是Char类型(比如输入"J"时,letter的值是'J')it.substring(0,1)对数组中的每个名字执行该方法,返回的是String类型(比如"John"执行后得到"J")- Kotlin中
equals方法默认会先校验类型一致性,不同类型的对象直接返回false。所以"J".equals('J')的结果是false,所有名字都不满足过滤条件,最终得到空数组[]。
常见修复方式:
- 将
letter转为String类型:var letter = readLine()!!.substring(0,1) - 将
substring结果转为Char类型:it[0].equals(letter)
二、filter函数的工作机制
filter是Kotlin集合的扩展函数,用于筛选符合条件的元素- 执行流程:遍历原集合的每一个元素,将元素传入指定的lambda表达式做条件判断
- 若lambda返回
true,该元素会被加入结果集合;返回false则被排除 - 最终返回包含所有符合条件元素的新集合,原集合不会被修改
内容的提问来源于stack exchange,提问作者sievy
相关产品推荐
相关产品推荐

