Eu tenho uma API Java que retorna uma lista como:
public List<?> getByXPath(String xpathExpr)
Estou usando o código scala abaixo:
val lst = node.getByXPath(xpath)
Agora, se eu tentar o açúcar da sintaxe scala, como:
lst.foreach{ node => ... }
não funciona. Eu recebo o erro:
value foreach is not a member of java.util.List[?0]
Parece que eu preciso converter Java List em Scala List. Como fazer isso no contexto acima?
Respostas:
EDIT: Observe que isso está obsoleto desde 2.12.0. Use em
JavaConverters
vez disso. (comentário de @Yaroslav)Desde o Scala 2.8, essa conversão agora é incorporada ao idioma usando:
trabalho.
asScala
não funcionoufonte
JavaConversions
estão obsoletos desde 2.12.0. Use emJavaConverters
vez disso.import scala.jdk.CollectionConverters._
scala-lang.org/api/2.13.x/scala/jdk/CollectionConverters$.htmlExiste um objeto Scala útil apenas para isso - scala.collection.JavaConverters
Você pode fazer a importação e
asScala
depois da seguinte maneira:Isso deve fornecer a
Buffer
representação do Scala, permitindo que você realizeforeach
.fonte
Eu estava procurando uma resposta escrita em Java e surpreendentemente não consegui encontrar nenhuma solução limpa aqui. Depois de um tempo, consegui descobrir e decidi adicioná-lo aqui, caso outra pessoa estivesse procurando a implementação Java (acho que também funciona no Scala?):
fonte
Se você precisar converter um Java
List<ClassA>
em um ScalaList[ClassB]
, faça o seguinte:1) Adicionar
2) Utilizar métodos
asScala
,toList
e em seguidamap
3) Adicione o seguinte ao
ClassB
construtor que recebeClassA
como parâmetro:fonte
Desde o scala 2.8.1, use
JavaConverters._
para converter as coleções scala e Java usando os métodos asScala e asJava.import scala.collection.JavaConverters._
javalist.asScala
scalaSeq.asJava
consulte o site do documento de escala de relacionamento de conversão
fonte
Atalho para converter a lista java em lista scala
import scala.collection.JavaConverters._
myjavaList.asScala.toList
fonte