How to get Scala List from Java List?

前端 未结 6 1274
半阙折子戏
半阙折子戏 2021-01-29 23:23

I have a Java API that returns a List like:

public List getByXPath(String xpathExpr)

I am using the below scala code:

         


        
相关标签:
6条回答
  • 2021-01-29 23:39

    I was looking for an answer written in Java and surprisingly couldn't find any clean solutions here. After a while I was able to figure it out so I decided to add it here in case someone else is looking for the Java implementation (I guess it also works in Scala?):

    JavaConversions.asScalaBuffer(myJavaList).toList()
    
    0 讨论(0)
  • 2021-01-29 23:40

    EDIT: Note that this is deprecated since 2.12.0. Use JavaConverters instead. (comment by @Yaroslav)

    Since Scala 2.8 this conversion is now built into the language using:

    import scala.collection.JavaConversions._
    
    ...
    
    lst.toList.foreach{ node =>   .... }
    

    works. asScala did not work

    In 2.12.x use import scala.collection.JavaConverters._

    In 2.13.x use import scala.jdk.CollectionConverters._

    0 讨论(0)
  • 2021-01-29 23:48

    If you have to convert a Java List<ClassA> to a Scala List[ClassB], then you must do the following:

    1) Add

    import scala.collection.JavaConverters._
    

    2) Use methods asScala, toList and then map

    List <ClassA> javaList = ...
    var scalaList[ClassB] = javaList.asScala.toList.map(x => new ClassB(x))
    

    3) Add the following to the ClassB constructor that receives ClassA as a parameter:

    case class ClassB () {
       def this (classA: ClassA) {
          this (new ClassB (classA.getAttr1, ..., classA.getAttrN))
       }
    }
    
    0 讨论(0)
  • 2021-01-29 23:51

    There's a handy Scala object just for this - scala.collection.JavaConverters

    You can do the import and asScala afterwards as follows:

    import scala.collection.JavaConverters._
    
    val lst = node.getByXPath(xpath).asScala
    lst.foreach{ node =>   .... }
    

    This should give you Scala's Buffer representation allowing you to accomplish foreach.

    0 讨论(0)
  • 2021-01-30 00:03

    Since scala 2.8.1 use JavaConverters._ to convert scala and Java collections using asScala and asJava methods.

    import scala.collection.JavaConverters._

    javalist.asScala

    scalaSeq.asJava

    see the Conversion relationship scala doc site

    0 讨论(0)
  • 2021-01-30 00:04

    Shortcut to convert java list to scala list

    import scala.collection.JavaConverters._

    myjavaList.asScala.toList

    0 讨论(0)
提交回复
热议问题