如何在并行连接中连接两个ArrayList(List(String)]

时间:2016-04-13 16:14:41

标签: scala concatenation

我有两个ArrayList(List [String]),例如:

ArrayList1:           ArrayList1:
List(a, b, c)         List(1, 2, 3)
List(d, e, f)         List(4, 5, 6)
List(g,h, i)          List(7,8, 9)

我想使用scala并行加入,比如这样做

val ArrayList12 = ArrayList1 ++ ArrayList2 

但这不是我想要的,因为ArrayList2在ArrayList1的末尾添加了

请帮助我使用scala以这种形式进行并行连接:

List(a, b, c,1,2,3) 
List(d, e, f,4,5,6)
List(g,h,i,7,8,9)

3 个答案:

答案 0 :(得分:2)

您可以使用zip。

val arrayList12 = arrayList1.zip(arrayList2).map(tuple => tuple._1 ++ tuple._2)

zip返回一个List,它将第一个和第二个列表的每个元素组合成Tuple2,结果类型为Seq[(List[A],List[Int])]。 然后我们可以将该列表映射到具有map的平面结构,以连接元组中的两个列表。

答案 1 :(得分:1)

试试这个:

scala>  List(List("a","b","c"), List("d", "e", "f"))
res1: List[List[String]] = List(List(a, b, c), List(d, e, f))

scala>  List(List(1,2,3),List(4,5,6))
res2: List[List[Int]] = List(List(1, 2, 3), List(4, 5, 6))

scala> res1.zip(res2)
res3: List[(List[String], List[Int])] = List((List(a, b, c),List(1, 2, 3)), (List(d, e, f),List(4, 5, 6)))

给出List个元组。然后你可以map()跨越这些,添加每个元组的两个元素:

scala> res1.zip(res2).map(x => x._1 ++ x._2)
res5: List[List[Any]] = List(List(a, b, c, 1, 2, 3), List(d, e, f, 4, 5, 6))

答案 2 :(得分:0)

另一种剥皮方式:

val arrayList1 = List(List("a","b","c"), List("d", "e", "f"), List("g","h", "i"))
val arrayList2 =List(List("1","2","3"), List("4", "5", "6"), List("7", "8", "9"))
List(arrayList1, arrayList2).transpose.map(_.flatten)
// List(List(a, b, c, 1, 2, 3), List(d, e, f, 4, 5, 6), List(g, h, i, 7, 8, 9))

但如果我是真的这样做,我会使用Brian Agnew的回答