为什么我的Scala方法类型解析为Buffer而不是List?

时间:2014-05-21 11:10:30

标签: scala

对于下面的方法定义,当我将返回类型显式设置为List[String]时,编译器会抱怨,因为它期望(可变)Buffer[String]为什么? flatMap内的每个可能案例都会返回List[String]。列表的位置和原因 - >缓冲区转换发生了吗?

private def getHitTerms(q: Query, searcher: IndexSearcher, docId: Int): List[String] = {

    val bq = q.asInstanceOf[BooleanQuery]

    bq.clauses().asScala.flatMap(c => {
      val q = c.getQuery()
      if (q.isInstanceOf[BooleanQuery]) {
        getHitTerms(q, searcher, docId)
      } else if (searcher.explain(q, docId).isMatch()) {
        if (q.isInstanceOf[TermQuery]) {
          List(c.getQuery().asInstanceOf[TermQuery].getTerm().text())
        } else if (q.isInstanceOf[PhraseQuery]) {
            List(c.getQuery().asInstanceOf[PhraseQuery].getTerms().map(_.text()).mkString(" "))
        } else List.empty[String]
      } else List.empty[String]
    })
}

1 个答案:

答案 0 :(得分:5)

罪魁祸首是asScala。这通常会将Java集合转换为缓冲区。您应在其后添加.toList,因此bq.clauses().asScala.toList.flatMap(c => {...