Scala中如何根据另一个列表过滤列表元素?
问题解决:根据另一个列表过滤列表元素
你的代码问题出在错误使用了map和filterNot的组合,导致根本没起到过滤整个列表的作用。
错误原因分析
map的作用是遍历列表并转换每个元素,不是过滤元素。你用map处理List1的每个元组,再对元组调用filterNot,但元组本身不是集合,这个操作逻辑完全偏离了需求——你需要的是筛选List1中符合条件的元组,而不是修改每个元组的内容。- 你的代码相当于对每个元组做了无效操作,最终返回的还是原List1的所有元素。
正确解法
基础实现
直接使用filter方法筛选List1中元组第一个元素存在于List2的项:
val List1 = List(("1", "abc"), ("566", "cde"), ("356", "fff"), ("76", "aaa")) val List2 = List("2", "33", "566", "76") val result = List1.filter(tuple => List2.contains(tuple._1)) // 输出结果:List(("566", "cde"), ("76", "aaa"))
性能优化版本
如果List2的数据量较大,建议先把List2转换为Set——因为Set.contains的时间复杂度是O(1),远优于List.contains的O(n):
val List1 = List(("1", "abc"), ("566", "cde"), ("356", "fff"), ("76", "aaa")) val List2 = List("2", "33", "566", "76") val list2Set = List2.toSet val result = List1.filter(tuple => list2Set.contains(tuple._1))
内容的提问来源于stack exchange,提问作者Prajwal_7
相关产品推荐
相关产品推荐

