首页 > 解决方案 > 将 scala Seq[Double] 转换为 Java 列表在爪哇

问题描述

我一直在处理这个问题,我想将 Scala 转换Seq[Double]为 Java List<Double>。我发现的所有内容都显示了这是如何从 Scala 完成的,但我无法从 Java 中找到如何做到这一点。

这就是我所拥有的:

private void fun(Seq<scala.Double> scalaSeq) {
    List<java.lang.Double> l = JavaConverters.seqAsJavaList(scalaSeq).stream().map(a -> java.lang.Double.valueOf(a.toString())).collect(Collectors.toList());
}

因此,基本上,我将 scala 转换Seq为 Java List,对其进行流式传输,然后将 Scala 字符串转换Double为 Java Double。我尝试使用Double::box,但当我尝试时编译器拒绝编译。显然它需要一个java.lang.Double

我想知道是否有更直接的方法可以做到这一点,并想记录下来以备将来参考。有什么建议么?

标签: javascala

解决方案


Seq<scala.Double>据我所知(除非它在以后的 Scala 版本中改变),在 Java 中不会有用相反,ScalaSeq[Double]将具有Seq<Object>从 Java 中看到的类型。但是,它实际上会包含java.lang.Double对象,所以只是“作弊”

@SuppressWarnings("unchecked")
private void fun(Seq<Object> scalaSeq) {
    List<Double> l = (List<Double>) (List<?>) JavaConverters.seqAsJavaList(scalaSeq);
}

或者

@SuppressWarnings("unchecked")
private void fun(Seq<Object> scalaSeq) {
    List<Double> l = JavaConverters.seqAsJavaList((Seq<Double>) (Seq<?>) scalaSeq);
}

(所有Doublejava.lang.Double)应该工作得很好。


推荐阅读