Объединить карту и список, чтобы получить tuple3?

У меня есть Map[String,String] и у меня есть List[String]. Я хочу объединить оба из них, чтобы создать Tuple[String, String, String]. Каков наиболее эффективный способ достичь этого? Я попытался сделать это, но он не работает:

val queryTimeMap = logToMap(reqSlowQueryData)
 val iter = qNumber.iterator
 val tup : Tuple3[String , String , String]= queryTimeMap.map(element=> {
 (element._1, element._2 , iter.next())
 })
2 ответа

Использование для понимания

Map( "a"->"aa", "b"->"bb" )
m: Map(a -> aa, b -> bb)

val l = List( "x", "y" )
l: List(x, y)

как это,

for ( ((k,v),i) <- m zip l ) yield (k,v,i)
res: List((a,aa,x), (b,bb,y))


Вы можете сделать что-то вроде ниже, которое использует представление, чтобы избежать создания промежуточной коллекции (через zip):

val map: Map[String, String] = Map("abc"-> "ABC", "def" -> "DEF", "ghi" -> "GHI")
val list: List[String] = List("One", "Two", "Three")
val combined: List[Tuple3[String, String, String]] = map.view.zip(list).map(x => (x._1._1, x._1._2, x._2)).toList

licensed under cc by-sa 3.0 with attribution.