相关疑难解决方法(0)

Scala中的JavaConverters和JavaConversions之间有什么区别?

scala.collection,有两个非常相似的对象JavaConversionsJavaConverters.

  • 这两个对象有什么区别?
  • 为什么它们都存在?
  • 我什么时候想要使用其中一个?

scala scala-java-interop scala-collections

195
推荐指数
4
解决办法
4万
查看次数

如何从Java列表中获取Scala列表?

我有一个返回List的Java API,如:

public List<?> getByXPath(String xpathExpr)
Run Code Online (Sandbox Code Playgroud)

我使用下面的scala代码:

val lst = node.getByXPath(xpath)
Run Code Online (Sandbox Code Playgroud)

现在,如果我尝试scala语法糖,如:

lst.foreach{ node => ... }
Run Code Online (Sandbox Code Playgroud)

这是行不通的.我收到错误:

value foreach is not a member of java.util.List[?0]
Run Code Online (Sandbox Code Playgroud)

看来我需要将Java List转换为Scala List.如何在上述背景下做到这一点?

java scala

129
推荐指数
6
解决办法
8万
查看次数

将 java.util.List 转换为 Scala 列表的最佳解决方案

我正在尝试将 java.util.List 转换为 Scala 列表。674713 帖子中提出了多种可能性,所以我想知道哪一种是最好的。我使用的是 Play 2.1.1。我的模型是:

case class Page[T](
    var data: java.util.List[T],
    var previous: String,
    var next: String,
    var totalPageCount: Int)(implicit val tWrites: Writes[T])

object Page {

    implicit def pageWrites[T: Writes]: Writes[Page[T]] = (
        (__ \ 'data).write[java.util.List[T]] and
        (__ \ 'previous).write[String] and
        (__ \ 'next).write[String] and
        (__ \ 'totalPageCount).write[Int])(unlift(Page.unapply[T]))
}
Run Code Online (Sandbox Code Playgroud)

此代码不起作用,因为我需要为通用 java.util.List[T] 类型添加编写器。

我已将其添加到我的对象 Page 中:

implicit def listWrites[T](implicit fmt: Writes[T]): Writes[List[T]] = new Writes[List[T]] {
    def writes(ts: List[T]) = JsArray(ts.map(t => Json.toJson(t)(fmt)))
}
Run Code Online (Sandbox Code Playgroud)

但这在执行我的项目时会产生错误(listWrites 上的“MatchError:null”)。因此,我想将 java.util.List 转换为 …

scala

1
推荐指数
1
解决办法
2681
查看次数