Convert from scala.collection.Seq to java.util.List in Java code

前端 未结 4 878
Happy的楠姐
Happy的楠姐 2020-12-09 08:53

I\'m calling a Scala method, from Java. And I need to make the conversion from Seq to List.

I can\'t modified the signature of the Scala method, so I can\'t used the

相关标签:
4条回答
  • 2020-12-09 09:09

    (In case you want to do this conversion in Scala code)

    You can use JavaConverters to make this really easy.

    import collection.JavaConverters._
    val s: Seq[String] = ...
    val list: java.util.List<String> = s.asJava
    
    0 讨论(0)
  • 2020-12-09 09:13

    Since 2.12 this is the recommended way:

    public static <T> java.util.List<T> convert(scala.collection.Seq<T> seq) {
        return scala.collection.JavaConverters.seqAsJavaList(seq);
    }
    

    All other methods a @deprecated("use JavaConverters or consider ToJavaImplicits", since="2.12.0")

    0 讨论(0)
  • 2020-12-09 09:20

    You're on the right track using JavaConversions, but the method you need for this particular conversion is seqAsJavaList:

    java.util.List<String> convert(scala.collection.Seq<String> seq) {
        return scala.collection.JavaConversions.seqAsJavaList(seq);
    }
    

    Update: JavaConversions is deprecated, but the same function can be found in JavaConverters.

    java.util.List<String> convert(scala.collection.Seq<String> seq) {
        return scala.collection.JavaConverters.seqAsJavaList(seq);
    }
    
    0 讨论(0)
  • 2020-12-09 09:21

    Since Scala 2.9, you shouldn't use implicits from JavaConversions since they are deprecated and will soon be removed. Instead, to convert Seq into java List use convert package like this (although it doesn't look very nice):

    import scala.collection.convert.WrapAsJava$;
    
    public class Test {
        java.util.List<String> convert(scala.collection.Seq<String> seq) {
            return WrapAsJava$.MODULE$.seqAsJavaList(seq);
        }
    }
    
    0 讨论(0)
提交回复
热议问题