我有两个列表
val list1 = List((List("AAA"),"B1","C1"),(List("BBB"),"B2","C2"))
val list2 = List(("AAA",List("a","b","c")),("BBB",List("c","d","e")))
我希望将list2
中的第一个元素与list1
的第一个元素进行匹配,并获得组合列表。
我希望输出为 -
List((List("AAA"),"B1","C1",List("a","b","c")))
如何使用Scala获得上述输出?
答案 0 :(得分:0)
这就是我提出的:
scala> val l1 = List((List("AAA"),"B1","C1"),(List("BBB"),"B2","C2"))
l1: List[(List[String], String, String)] = List((List(AAA),B1,C1), (List(BBB),B2,C2))
scala> val l2 = List((List("AAA"), List("a", "b", "c")), (List("BBB"), List("c", "d", "e")))
l2: List[(String, List[String])] = List((AAA,List(a, b, c)), (BBB,List(c, d, e)))
scala> l1.collectFirst {
| case tp => l2.find(tp2 => tp2._1.head == tp._1.head).map(founded => (tp._1, tp._2, tp._3, founded._2))
| }.flatten
res2: Option[(List[String], String, String, List[String])] = Some((List(AAA),B1,C1,List(a, b, c)))
您可以使用collectFirst
过滤您不想要的值以及您在第二个列表中使用find
的每个元组,并将其映射到您想要的元组。
有几个笔记,这太可怕了,我不知道你是如何得到Tuple4
的,我个人讨厌所有tp._*
符号,这很难读,想想关于使用案例类将所有这些包装到一些更易于管理的结构中,第二个我不得不使用.head
,如果空列表会抛出异常,所以你可能想在此之前做一些检查,但正如我所说,我会完全检查我的代码,并避免花时间在一些有缺陷的架构上工作。
答案 1 :(得分:0)
您可以使用zip组合列表
val list1 = List((List("AAA"),"B1","C1"),(List("BBB"),"B2","C2"))
val list2 = List(("AAA",List("a","b","c")),("BBB",List("c","d","e")))
val combinedList = (list1 zip list2)
combinedList.head will give you the desired result
它将给出组合列表,您可以从中获取第一个元素