Конвертировать Scala Set в Java (java.util.Set)? - PullRequest
27 голосов
/ 10 февраля 2010

У меня есть набор в Scala (я могу выбрать любую реализацию при создании набора. Используемая мной библиотека 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[_]

Ответы [ 5 ]

23 голосов
/ 10 февраля 2010

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

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

7 голосов
/ 27 ноября 2016

Поскольку 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
5 голосов
/ 10 февраля 2010

Для 2.7.x I сильно рекомендуем использовать: http://github.com/jorgeortiz85/scala-javautils

0 голосов
/ 30 марта 2019

Обратите внимание, что начиная с 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)
0 голосов
/ 28 августа 2017

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...