任意大小的元组,第一个元素类型固定

Jus*_*s12 0 scala

说我有两个清单

val L1 = List[(Int, Int)]((1,1), (2,2))
val L2 = List[(Int, Int, Int)]((1,1,1), (2,2,2))
Run Code Online (Sandbox Code Playgroud)

现在我想创建一个函数func,它接受一个I​​nt值i以及第一个元素匹配的两个列表中的所有项i.一种方法是

def func(i:Int) = {
  L1.collect.collect{case any if any._1 != i => any}
  L2.collect.collect{case any if any._1 != i => any}
}
Run Code Online (Sandbox Code Playgroud)

考虑到两条线是如此相似,如果可以缩短代码将是很好的.我正在以某种方式瘦我可以传递L1(和L2)作为参数func.该函数不应该预先知道元组将具有多少元素,只是第一个元素是Int.

这可能吗?

[编辑:我认为问题不够明确.我很抱歉.]

这就是我想要做的.我想在两个以上的列表上做这个,比如n,通过func多次调用,每个列表一次.

  L1 = L1.collect.collect{case any if any._1 != i => any}
  L2 = L2.collect.collect{case any if any._1 != i => any}
  ...
  Ln = Ln.collect.collect{case any if any._1 != i => any}
Run Code Online (Sandbox Code Playgroud)

其中每个L1,, L2... Ln是具有第一个元素的元组列表Int

[EDIT2]

在上面,L1可以列出(Int, String),L2可以是(Int, Int, Int)等等.唯一的保证是第一个元素是Int.

Lui*_*hys 6

  def func(i:Int, lst: List[Product]) = {
    lst.filter(_.productElement(0) == i)
  }
Run Code Online (Sandbox Code Playgroud)

根据你的编辑和丹的评论编辑.