将scala-Seq[Double]转换为Java列表<;双倍>;在爪哇
我一直在处理这个问题,我想将Scala将scala-Seq[Double]转换为Java列表<;双倍>;在爪哇,java,scala,Java,Scala,我一直在处理这个问题,我想将ScalaSeq[Double]转换为Java列表。我发现的所有东西都显示了如何从Scala实现这一点,但我找不到如何从Java实现这一点 这就是我所拥有的: private void fun(Seq<scala.Double> scalaSeq) { List<java.lang.Double> l = JavaConverters.seqAsJavaList(scalaSeq).stream().map(a -> java.l
Seq[Double]
转换为Java列表
。我发现的所有东西都显示了如何从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());
}
private void fun(Seq scalaSeq){
List l=JavaConverters.seqAsJavaList(scalaSeq).stream().map(a->java.lang.Double.valueOf(a.toString()).collect(Collectors.toList());
}
基本上,我将scalaSeq
转换为Java列表
,在其上进行流式处理,然后将scalaDouble
转换为JavaDouble
。
我尝试改用Double::box
,但我尝试时编译器拒绝编译。显然它需要一个java.lang.Double
我想知道是否有一个更直接的方法来做这件事,并希望记录这一点,以供将来参考。有什么建议吗?您可以尝试以下方法:
.map(s-> java.lang.Double.parseDouble(s.toString()));
据我所知,Seq
在Java中不会有用(除非在以后的Scala版本中有所改变)。相反,ScalaSeq[Double]
将具有Java中的类型Seq
。然而,它实际上将包含java.lang.Double
对象,所以只需使用
@SuppressWarnings(“未选中”)
私人空间乐趣(Seq scalaSeq){
List l=(List)(List)JavaConverters.seqAsJavaList(scalaSeq);
}
或
@SuppressWarnings(“未选中”)
私人空间乐趣(Seq scalaSeq){
List l=JavaConverters.seqAsJavaList((Seq)(Seq)scalaSeq);
}
(所有的
Double
都有java.lang.Double
)应该可以很好地工作。您能补充一些关于您的解决方案的解释吗。真的有必要对字符串表示进行往返吗?我不确定使用Double.parseDouble()
与Double.valueOf()
有什么不同(如果有的话)。您能解释一下它是否更好吗?这两种方法都给了我一个编译错误:不可转换类型;无法将java.util.List强制转换为java.util.List
。但是,根据您的建议,我管理了以下内容:JavaConverters.seqAsJavaList(scalaSeq.stream().mapToDouble(a->Double.valueOf((Double)a)).boxed().collect(Collectors.toList())我发现code>仍然很难看,但比我最初的方法要好实际上,Double.valueOf()
是多余的,因为只要强制转换就足够了。啊,对了,你需要添加一个中间强制转换来避免这个问题。现在应该修好了。
@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);
}