web-dev-qa-db-fra.com

Conversion de scala.collection.Seq <String> en Java.util.List <String> en code Java

J'appelle une méthode Scala, de Java. Et je dois faire la conversion de Seq à List.

Je ne peux pas modifier la signature de la méthode Scala, je ne peux donc pas utiliser la méthode asJavaCollection à partir de scala.collection.JavaConversions._

Des idées sur comment puis-je atteindre cet objectif?

Utiliser Scala 2.9.3

27
Cacho Santa

Vous êtes sur la bonne voie en utilisant JavaConversions, mais la méthode dont vous avez besoin pour cette conversion particulière est seqAsJavaList:

Java.util.List<String> convert(scala.collection.Seq<String> seq) {
    return scala.collection.JavaConversions.seqAsJavaList(seq);
}
37
Chris Martin

Depuis Scala 2.9, vous ne devriez plus utiliser les implicites de JavaConversions car ils sont obsolètes et seront bientôt supprimés. Au lieu de cela, pour convertir Seq en Java List, utilisez le paquetage convert comme ceci (même s'il n'a pas l'air très joli):

import scala.collection.convert.WrapAsJava$;

public class Test {
    Java.util.List<String> convert(scala.collection.Seq<String> seq) {
        return WrapAsJava$.MODULE$.seqAsJavaList(seq);
    }
}
8
4lex1v

Depuis la version 2.12, c'est la méthode recommandée:

public static <T> Java.util.List<T> convert(scala.collection.Seq<T> seq) {
    return scala.collection.JavaConverters.seqAsJavaList(seq);
}

Toutes les autres méthodes a @deprecated("use JavaConverters or consider ToJavaImplicits", since="2.12.0")

5
berezovskyi

(Si vous voulez faire cette conversion en code Scala)

Vous pouvez utiliser JavaConvertisseurs pour rendre cela vraiment facile.

import collection.JavaConverters._
val s: Seq[String] = ...
val list: Java.util.List<String> = s.asJava
0
rasen58