2016-04-13 8 views
3

Ich habe zwei Arraylist (Liste [String]) zB:Wie zwei Arraylist (Liste (String)] parallel Join

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) 

ich scala verwenden möchten parallel so verbinden diese

wie tun
val ArrayList12 = ArrayList1 ++ ArrayList2 

aber das ist nicht, was ich will, da die ArrayList2 am Ende ArrayList1 hinzugefügt wurde

Bitte werde ich schätzen Hilfe scala mit einem parallel zu haben, kommen in dieser Form:

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

Antwort

2

Sie können zip verwenden.

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

zip gibt eine Liste, die jedes Element der ersten und der zweiten Liste in eine Tuple2Seq[(List[A],List[Int])] ist, die sich ergebende Art kombiniert. Dann können wir diese Liste zu einer flachen Struktur mit map zuordnen, um die zwei Listen im Tuple zu verketten.

+0

Sicher .map (x => x._1 ++ x._2)? –

+0

@BrianAgnew Selbe Sache, Scala erlaubt diese kürzere Syntax aswell :) Siehe hier: http://StackOverflow.com/Questions/7673545/Usage-of-in-Scala-Lambda-Funktionen –

+0

Aber ist nicht das _ * positional * - Das heißt, wenn du es zweimal verwendest, suggeriert es zwei verschiedene Argumente, während du eigentlich das eine Argument (das Tupel) mit den beiden Feldern haben willst? –

1

Versuchen Sie folgendes:

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))) 

die eine List von Tupeln gibt. Sie können dann über diese map(), die Addition der beiden Elemente jedes Tupel:

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)) 
+0

Ich glaube nicht, dass ich es tat. Ich habe versucht, Ihre in der REPL ohne Freude, aufgrund der positionalen Platzhalter –

+0

@TheArchetypalPaul - gerade getan, dass die folgenden Kommentare –

+0

Sorry für die Verwirrung! Ehrlicher Fehler! –

0

nur eine andere Art, die Katze von Häuten:

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)) 

Aber wenn ich es wirklich tun, würde ich verwenden Brian Agnews Antwort