我假設你想要的結果有型List[(String, Int, Int)]
,這意味着你承擔各自的「鑰匙」(字母,如x
)具有正好兩個匹配的元組(否則由此產生的名單可能是項目不是3元組)。
如果是這樣的話:
val data = List(List(("x", 20), ("y",20)), List(("x", 30), ("y",40)))
val result: List[(String, Int, Int)] = data
.flatten // flatten to get a list of tuples
.groupBy(_._1) // group by tuple's first element
.mapValues(_.map(_._2)) // get rid of "key" in value list
.map { case (k, List(i1, i2)) => (k, i1, i2) }.toList // ASSUMEs each key has exactly two entries, creates 3-Tuples
println(result) // List((y,20,40), (x,20,30))
否則 - 如果在結果中的元組不能保證所有具有相同數量的元素(即不是所有的「鑰匙」將會有確切的兩個「值」 ),那麼我強烈建議留Lists
,您可以通過以下方式實現:
val data = List(List(("x", 20), ("y",20)), List(("x", 30), ("y",40)), List(("x", 50)))
val result: List[List[Any]] = data
.flatten // flatten to get a list of tuples
.groupBy(_._1) // group by tuple's first element
.map { case (k, l) => k :: l.map(_._2) }.toList // prepend key to list of values
println(result) // List(List(y, 20, 40), List(x, 20, 30, 50))
您確定您的'名單[列表[產品型號]'總是恰好包含2只列出了? –
沒有賈斯珀它contails n沒有項目。 – kittu
'[(x,20),(y,20)]'不是'List [List [Tuple2]]',它是一個'List [Tuple2]' –