Stack Overflowの質問new HashSet(Collection)と同等のスカラに関連して、Javaコレクション(Java.util.List
say)into Scala collection List
?
私は実際にJava API呼び出しを Spring'sSimpleJdbcTemplate
に変換しようとしていますが、これはJava.util.List<T>
、Scala immutable HashSet
に。したがって、たとえば:
val l: Java.util.List[String] = javaApi.query( ... )
val s: HashSet[String] = //make a set from l
これはうまくいくようです。批判は大歓迎です!
import scala.collection.immutable.Set
import scala.collection.jcl.Buffer
val s: scala.collection.Set[String] =
Set(Buffer(javaApi.query( ... ) ) : _ *)
最後の提案は機能しますが、jcl.Buffer
の使用を避けることもできます。
Set(javaApi.query(...).toArray: _*)
scala.collection.immutable.Set
は、Predef.scala
のおかげでデフォルトで使用可能になっていることに注意してください。
将来の参照用:Scala 2.8では、次のように実行できます。
import scala.collection.JavaConversions._
val list = new Java.util.ArrayList[String]()
list.add("test")
val set = list.toSet
set
はscala.collection.immutable.Set[String]
この後。
(JavaConvertersを使用した)より明示的な方法については Ben Jamesの答え も参照してください。これは現在推奨されているようです。
robinst's answer で示されているJavaConversionsよりも明確にしたい場合は、JavaConvertersを使用できます。
import scala.collection.JavaConverters._
val l = new Java.util.ArrayList[Java.lang.String]
val s = l.asScala.toSet
JavaConversions( robinst's answer )andJavaConverters( Ben James's answer ) Scala 2.10で非推奨になりました。
JavaConversionsの代わりに:
import scala.collection.convert.wrapAll._
aleksandr_hramcov で示唆されているとおり。
JavaConvertersの代わりに:
import scala.collection.convert.decorateAll._
どちらの場合も、変換/コンバータをJavaまたはScalaにそれぞれインポートするだけで、たとえば:
import scala.collection.convert.wrapAsScala._
更新:上記のステートメントJavaConversionsおよびJavaConverters廃止されたことが間違っているようです。 Scala 2.10に非推奨のプロパティがいくつかあり、それらのインポート時に非推奨の警告が発生しました。したがって、ここでの代替インポートはエイリアスにすぎないようです。適切な。
また、この優れたライブラリを調べることもできます。 scalaj-collection JavaとScalaコレクション。あなたの場合、Java.util.ListをScala Listに変換するには、次のようにします。
val list = new Java.util.ArrayList[Java.lang.String]
list.add("A")
list.add("B")
list.asScala
val array = Java.util.Arrays.asList("one","two","three").toArray
val list = array.toList.map(_.asInstanceOf[String])
この問題を解決する別の簡単な方法:
import collection.convert.wrapAll._
ToArray呼び出しに型情報を追加して、Setをパラメーター化できます。
val s = Set(javaApi.query(....).toArray(new Array[String](0)) : _*)
これは、コレクションパッケージがScala 2.8およびscala.collection.jclパッケージが going away
Javaコレクションを配列に変換してから、Scalaリストを作成できます。
val array = Java.util.Arrays.asList("one","two","three").toArray
val list = List.fromArray(array)
Scala 2.13
を開始し、パッケージ scala.jdk.CollectionConverters
パッケージscala.collection.JavaConverters/JavaConversions._
を置き換えます:
import scala.jdk.CollectionConverters._
// val javaList: Java.util.List[String] = Java.util.Arrays.asList("one","two","three")
javaList.asScala
// collection.mutable.Buffer[String] = Buffer("one", "two", "three")
javaList.asScala.toSet
// collection.immutable.Set[String] = Set("one", "two", "three")