由于类型不匹配需要java.io.Serializable,Scala reduceList失败

时间:2016-12-07 15:11:16

标签: scala

我正在尝试将列表与以下功能组合在一起:

def merge(first: List[(Char, Int)], other: List[(Char, Int)]): List[List[(Char, Int)]] = 
  first.flatMap(tpl => other map (tpl2 => List(tpl, tpl2)))

def combine(l: List[List[(Char, Int)]]): List[List[(Char, Int)]] = l reduceLeft merge

不幸的是,我得到以下编译器消息:

  

错误:类型不匹配;
   found :( List [(Char,Int)],List [(Char,Int)])=>列表[List [(Char,Int)]]
    required :( List [Product with java.io.Serializable],List [(Char,Int)])=>列表[带有java.io.Serializable的产品]
   l reduceLeft合并

我了解减少List[Int]只能生成Int的结果。在我的情况下,我有List[List[(Char, Int)]]所以我希望我可以生成List[(Char, Int)]的结果。任何人都可以帮我理解我的代码有什么问题吗?

1 个答案:

答案 0 :(得分:1)

reduceLeft的定义:

def reduceLeft[B >: A](op: (B, A) ⇒ B): B

因此,您的函数merge必须返回List[(Char, Int)]而不是List[List[(Char, Int)]] 。此外,您的函数combine将返回List[(Char, Int)],因为它会减少List中的List。