我是scala的新手。在使用元组的地图和平面地图时,我需要很多帮助。
我具有以下功能-
def extract(url: String): String = {//some code}
def splitstring(content: String): Array[String]={//some code}
def SentenceDetect(paragraph: Array[String]): Array[String] = {//some code}
def getMd5(literal: String): String = {//some code}
我有一个传入的URL列表。我希望它能够使用地图和平面图来完成上述一系列功能。
var extracted_content=url_list.map(url => (url,extract(url)))
val trimmed_content=extracted_content.map(t => (t._1,splitstring(t._2)))
val sentences=trimmed_content.map(t => (t._1,SentenceDetect(t._2)))
val hashed_values=sentences.flatMap(t => (t._1,getMd5(t._2)))
问题是由于类型不匹配,flatMap出现了错误-
Error:(68, 46) type mismatch;
found : (String, String)
required: scala.collection.GenTraversableOnce[?]
val hashed_values=sentences.flatMap(t => (t._1,getMd5(t._2.toString)))
如何完成它。
答案 0 :(得分:1)
我想这就是你的追求。
val hashed_values = sentences.map(t => (t._1, t._2.map(getMd5)))
这应该导致类型为List[(String,Array[String])]
。假设您实际上需要t._2
数组中每个元素的Md5计算。
回想一下flatMap()
的签名是flatMap(f: (A) ⇒ GenTraversableOnce[B])
,换句话说,它采用一个函数,该函数采用一个元素并返回过渡元素的集合。元组(String,String)
不是GenTraversableOnce
,因此您将得到错误。
答案 1 :(得分:-2)
由于getMd5(...)
接受字符串,但是sentences
的类型为List[(String, Array[String])]
(假设url_list
为List[String]
),因此出现{{{ 1}}的类型为t._2
。
无论如何,关于您的代码的一些注意事项:
Array[String]
应该是extracted_content
val
而不是.mapValues