代码之家  ›  专栏  ›  技术社区  ›  Sven

Kotlin中的Scala序列

  •  0
  • Sven  · 技术社区  · 4 年前

    我需要实现一个返回Scala的方法 Seq 在Java中。

    但我遇到了这个错误:

    java.util.ArrayList cannot be cast to scala.collection.Seq
    

    这是我到目前为止的代码:

    @Override
    public Seq<String> columnNames() {
        List<String> a = new ArrayList<String>();
        a.add("john");
        a.add("mary");
        Seq<String> b = (scala.collection.Seq<String>) a;
        return b;
    }
    

    但是 scala.collection.JavaConverters 似乎不提供转换为 Seq .

    0 回复  |  直到 5 年前
        1
  •  55
  •   Fundhor    7 月前

    我需要JavaConverters来解决这个问题。

    import scala.collection.JavaConverters;
    
    public Seq<String> convertListToSeq(List<String> inputList) {
        return JavaConverters.asScalaIteratorConverter(inputList.iterator())
                             .asScala()
                             .toSeq();
    }
    
        2
  •  25
  •   Dima    9 年前

    JavaConversions 应该行得通。我想,你正在寻找这样的东西: JavaConversions.asScalaBuffer(a).toSeq()

        3
  •  22
  •   Xavier Guihot    3 年前

    启动 Scala 2.13 ,包装 scala.jdk.javaapi.CollectionConverters 替换已弃用的软件包 scala.collection.JavaConverters/JavaConversions :

    import scala.jdk.javaapi.CollectionConverters;
    
    // List<String> javaList = Arrays.asList("a", "b");
    CollectionConverters.asScala(javaList).toSeq();
    // Seq[String] = List(a, b)
    
        4
  •  7
  •   loicmathieu    8 年前

    最多4个元素,您可以简单地使用Seq类的工厂方法,如下所示:

    Seq<String> seq1 =  new Set.Set1<>("s1").toSeq();
    Seq<String> seq2 =  new Set.Set2<>("s1", "s2").toSeq();
    Seq<String> seq3 =  new Set.Set3<>("s1", "s2", "s3").toSeq();
    Seq<String> seq4 =  new Set.Set4<>("s1", "s2", "s3", "s4").toSeq();
    
        5
  •  7
  •   Nikhil    7 年前

    这对我奏效了!(Java 8,Spark 2.0.0)

    import java.util.ArrayList;
    
    import scala.collection.JavaConverters;
    import scala.collection.Seq;
    
    public class Java2Scala
    {
    
        public Seq<String> getSeqString(ArrayList<String> list)
            {
                return JavaConverters.asScalaIterableConverter(list).asScala().toSeq();
            }
    
    }
    
        6
  •  6
  •   Community CDub    7 年前

    @ Fundhor ,方法 asScalaIterableConverter 未显示在IDE中。这可能是由于Scala版本的不同。我使用的是Scala 2.11。相反,它出现了 asScalaIteratorConverter 。我对你最后的片段做了一点修改,它对我来说很好。

    scala.collection.JavaConverters.asScalaIteratorConverter(columnNames.iterator()).asScala().toSeq() 哪里 columnNames 是a java.util.List .

    谢谢!

        7
  •  5
  •   sapy    5 年前
    import scala.collection.JavaConverters;
    import scala.collection.Seq;
    
    import java.util.ArrayList;
    
    public class Helpers {
        public Seq<String> convertListToSeq(ArrayList<String> inputList) {
            return JavaConverters.collectionAsScalaIterableConverter(inputList).asScala().toSeq();
        }
    }
    

    版本-

    compile 'org.apache.spark:spark-core_2.11:2.3.1'
    compile 'org.apache.spark:spark-sql_2.11:2.3.1'
    compile group: 'commons-io', name: 'commons-io', version: '2.6'
    compile "com.fasterxml.jackson.module:jackson-module-scala_2.11:2.8.8"