Kotlin中List过滤条件在不同场景失效问题求助
问题原因与解决方案
核心问题
你用indexOf(it)判断元素索引的逻辑是错误的——indexOf返回的是集合中第一个匹配该元素的索引,而非当前元素的实际索引。
为什么navigation能正常工作?
navigation里你要提取的索引0、5、10对应的元素[1]、[5]、[9]都是唯一的,所以indexOf(it)返回的就是它们的实际索引,刚好符合0..10 step5的条件,因此结果正确。
为什么altNavigation出问题?
altNavigation里索引5的[X]在索引9处重复出现:
- 遍历到索引5的
[X]时,indexOf(it)返回5(符合条件,应该被加入结果) - 遍历到索引9的
[X]时,indexOf(it)还是返回5(同样符合条件,会被错误加入结果)
你说只拿到[1]、[9],大概率是检查结果时没注意到重复的[X],但根源都是indexOf的逻辑不符合“按实际索引提取元素”的需求。
正确写法
要基于实际索引过滤元素,直接用filterIndexed获取当前元素的索引:
val diagnolRow = navigation.filterIndexed { index, _ -> index in 0..10 step 5 } val diagnolRowAlt = altNavigation.filterIndexed { index, _ -> index in 0..10 step 5 }
这样不管元素是否重复,都能精准提取索引0、5、10对应的元素。
内容的提问来源于stack exchange,提问作者Dumile Chiwuta
相关产品推荐
相关产品推荐

