web-dev-qa-db-ja.com

Javaコードでscala.collection.Seq <String>からJava.util.List <String>に変換します

JavaからScalaメソッドを呼び出しています。SeqからListに変換する必要があります。

Scalaメソッドのシグネチャを変更できないため、scala.collection.JavaConversions._asJavaCollectionメソッドを使用できません。

どうすればこれを達成できるでしょうか?

Scala 2.9.3を使用

29
Cacho Santa

JavaConversionsを使用して正しい方向に進んでいますが、この特定の変換に必要な方法はseqAsJavaListです。

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

更新JavaConversionsは非推奨ですが、同じ関数が JavaConverters にあります。

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

Scala 2.9以降、JavaConversionsからの暗黙は使用すべきではありません。これらは非推奨であり、間もなく削除される予定です。代わりに、SeqをJava Listに変換するには、次のようにconvertパッケージを使用します(ただし、見た目はよくありません)。

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

2.12以降、これが推奨される方法です。

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

他のすべてのメソッドa @deprecated("use JavaConverters or consider ToJavaImplicits", since="2.12.0")

7
berezovskyi

(Scalaコードでこの変換を行う場合)

JavaConvertersを使用して、これを本当に簡単にすることができます。

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