The easiest way to convert a Java Collection to a Scala equivalent is using JavaConversions, since Scala 2.8.. Diese impliziten Defs geben Wrapper für die enthaltene Java Collection zurück.So erstellen Sie eine parallele Scala-Sammlung aus einer Java-Sammlung
Scala 2.9 führte parallele Sammlungen ein, bei denen Operationen an einer Sammlung parallel ausgeführt und das Ergebnis später gesammelt werden kann. Dies ist einfach zu implementieren, eine bestehende Sammlung in einen parallelen einer Umwandlung ist so einfach wie:
myCollection.par
Aber es gibt ein Problem bei der Verwendung ‚par‘ auf von Java Sammlungen umgewandelt Sammlungen mit JavaConversions. Wie in Parallel Collection Conversions beschrieben, inhärent sequentielle Sammlungen werden in eine neue parallele Sammlung ‚gezwungen‘, indem alle Werte und Addieren derselben zu dem neuen parallel Sammlung Auswertung:
Andere Sammlungen, wie Listen, Warteschlangen oder Ströme sind inhärent sequentiell in dem Sinne, dass die Elemente zugegriffen werden muss eine nach die andere. Diese Sammlungen werden in ihre parallelen Varianten konvertiert, indem die Elemente in eine ähnliche parallele Sammlung kopiert werden. Für Beispiel wird eine Funktionsliste in eine standardmäßige unveränderliche parallele Sequenz konvertiert, die ein Parallelvektor ist.
Dies führt zu Problemen, wenn die ursprüngliche Java-Sammlung faul ausgewertet werden soll. Wenn zum Beispiel nur ein Java-Iterable zurückgegeben wird, das später in ein Scala-Iterable konvertiert wird, gibt es keine Garantie, dass der Inhalt des Iterable beabsichtigt ist, eifrig zugegriffen zu werden oder nicht. Wie also sollte eine parallele Sammlung aus einer Java-Sammlung erstellt werden, ohne die Kosten für die Bewertung jedes Elements zu tragen? Es sind diese Kosten, die ich zu vermeiden versuche, indem ich eine parallele Sammlung verwende, um sie parallel auszuführen und hoffentlich die ersten n Ergebnisse, die angeboten werden, zu "nehmen".
Laut Parallel Collection Conversions gibt es eine Reihe von Auflistungstypen, die konstante Zeit kosten, aber es scheint keine Möglichkeit zu geben, eine Garantie zu erhalten, dass diese Typen von JavaConversions erstellt werden können (z. B. 'Set' kann erstellt werden). aber ist das ein 'HashSet'?).
Beachten Sie, dass es eine bessere Idee wäre, JavaConverter als JavaConversions als letztere zu verwenden, mit der Möglichkeit, etwas wie .asScala.toList.par zu tun. –