Подтвердить что ты не робот

Преобразовать Scala Установить в Java (java.util.Set)?

У меня есть Set in Scala (я могу выбрать любую реализацию, поскольку я создаю Set. Я использую библиотеку Java, которая ожидает java.util.Set [String].

Правильно ли это делается в Scala (используя scala.collection.jcl.HashSet # basic):

import com.javalibrary.Animals

var classes = new scala.collection.jcl.HashSet[String]
classes += "Amphibian"
classes += "Reptile"
Animals.find(classes.underlying)

Кажется, что работает, но поскольку я очень новичок в Scala, я хочу знать, является ли это предпочтительным способом (каким-либо другим способом я пытаюсь получить ошибку типа-несоответствия):

error: type mismatch;
 found   : scala.collection.jcl.HashSet[String]
 required: java.util.Set[_]
4b9b3361

Ответ 1

Если вы спрашивали о Scala 2.8, совместимость коллекций Java предоставляется scala.collection.JavaConversions. В этом случае вы хотите, чтобы JavaConversions.asSet(...) (там один для каждого направления, Java → Scala и Scala → Java).

Для Scala 2.7, каждый класс scala.collection.jcl, который обертывает коллекцию Java, имеет свойство underlying, которое предоставляет завернутый экземпляр коллекции Java.

Ответ 2

Так как Scala 2.12.0 scala.collection.JavaConversions устарел:

Следовательно, этот API устарел, и вместо этого следует использовать JavaConverters. JavaConverters предоставляет одни и те же преобразования, но с помощью методов расширения.

И поскольку Scala 2.8.1 вы можете использовать scala.collection.JavaConverters для этой цели:

import scala.collection.JavaConverters._
val javaSet = new java.util.HashSet[String]()
val scalaSet = javaSet.asScala
val javaSetAgain = scalaSet.asJava

Ответ 4

В Scala 2.12 можно использовать: scala.collection.JavaConverters.setAsJavaSet(scalaSetInstance)

Ответ 5

Обратите внимание, что начиная с Scala 2.13, пакет scala.jdk.CollectionConverters заменяет устаревшие пакеты scala.collection.JavaConverters/JavaConversions._:

import scala.jdk.CollectionConverters._

// val scalaSet: Set[String] = Set("a", "b")
val javaSet = scalaSet.asJava
// javaSet: java.util.Set[String] = [a, b]
javaSet.asScala
// scala.collection.mutable.Set[String] = Set(a, b)