У меня есть Java API, который возвращает список, как:
public List<?> getByXPath(String xpathExpr)
Я использую следующий код Scala:
val lst = node.getByXPath(xpath)
Теперь, если я попробую синтаксис scala, например:
lst.foreach{ node => ... }
это не работает. Я получаю ошибку:
value foreach is not a member of java.util.List[?0]
Кажется, мне нужно конвертировать Java List в Scala List. Как это сделать в вышеуказанном контексте?
Ответы:
РЕДАКТИРОВАТЬ: Обратите внимание, что это устарело с 2.12.0. Используйте
JavaConverters
вместо этого. (комментарий @Yaroslav)Начиная с Scala 2.8 это преобразование теперь встроено в язык с использованием:
работает.
asScala
не сработалоисточник
JavaConversions
устарели с 2.12.0. ИспользуйтеJavaConverters
вместо этого.import scala.jdk.CollectionConverters._
scala-lang.org/api/2.13.x/scala/jdk/CollectionConverters$.htmlДля этого есть удобный объект Scala - scala.collection.JavaConverters
Вы можете сделать импорт и
asScala
впоследствии следующим образом:Это должно дать вам
Buffer
представление Scala, позволяющее вам достичьforeach
.источник
Я искал ответ, написанный на Java, и, к удивлению, не смог найти здесь никаких чистых решений. Через некоторое время я смог понять это, поэтому я решил добавить его здесь на тот случай, если кто-то еще ищет реализацию Java (я думаю, это также работает в Scala?):
источник
Если вам нужно преобразовать Java
List<ClassA>
в ScalaList[ClassB]
, вы должны сделать следующее:1) Добавить
2) Используйте методы
asScala
,toList
а затемmap
3) Добавьте следующее в
ClassB
конструктор, который получаетClassA
в качестве параметра:источник
Поскольку scala 2.8.1 используется
JavaConverters._
для преобразования коллекций scala и Java с использованием методов asScala и asJava.import scala.collection.JavaConverters._
javalist.asScala
scalaSeq.asJava
см. сайт конверсии отношений scala doc
источник
Ярлык для преобразования списка Java в список Scala
import scala.collection.JavaConverters._
myjavaList.asScala.toList
источник