我正在做一些微不足道的事情:在Scala中创建org.apache.commons.math3.distribution.EnumeratedDistribution的新实例。最好的我能说明以下应该有效...
import org.apache.commons.math3.distribution.EnumeratedDistribution
import org.apache.commons.math3.util.Pair
val p = new Pair(1L, 0.5)
val q = new Pair(2L, 0.5)
val mapping = new java.util.ArrayList[Pair[Long, Double]]()
mapping.add(p)
mapping.add(q)
val dist = new EnumeratedDistribution(mapping)
...这在REPL中出现以下错误...
scala> val dist = new EnumeratedDistribution[Long](mapping)
<console>:10: error: type mismatch;
found : java.util.ArrayList[org.apache.commons.math3.util.Pair[Long,scala.Double]]
required: java.util.List[org.apache.commons.math3.util.Pair[Long,java.lang.Double]]
val dist = new EnumeratedDistribution[Long](mapping)
我认为java.util.List
是抽象的,因此必须使用类似ArrayList
的内容。我相信这是微不足道的。想法?
答案 0 :(得分:3)
您的问题来自Double
类型:当您使用java.lang.Double
时,预计会出现scala.Double
。
只需尝试:
val mapping = new java.util.ArrayList[Pair[Long, java.lang.Double]]()
然后它应该工作,因为你自己说,ArrayList
实现List
。