2

我在做一些琐碎的事情时遇到了可怕的事情:在 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。我确信这是微不足道的。想法?

4

1 回答 1

3

您的问题来自Doubletype:java.lang.Double在您使用scala.Double.

只需尝试:

val mapping = new java.util.ArrayList[Pair[Long, java.lang.Double]]()

然后它应该可以工作,因为正如您自己所说,ArrayListimplements List

于 2014-12-30T15:34:50.000 回答