【问题标题】:Java iterator used in scala not working properlyscala中使用的Java迭代器无法正常工作
【发布时间】:2015-09-06 21:29:17
【问题描述】:

我正在尝试使用 restfb 从 facebook 中获取用户的喜欢。 docs say 迭代器支持分页,但这在我的 scala 代码中不起作用。我预计这与 javaConversions 隐含有关,但我不确定。

这是我的代码:

import com.restfb.types.{Page, Photo, User}
import com.restfb.{Parameter, Version, DefaultFacebookClient}
import collection.JavaConversions._

class Facebook(accessToken: String) {

  val facebookClient = new DefaultFacebookClient(
    accessToken,
    Version.VERSION_2_4)

  def getInterests = {

    val likes = facebookClient.fetchConnection("me/likes", classOf[Page], 
       Parameter.`with`("fields", "id,name,category"))

    likes.getData.map(like => s"id=${like.getId}, name=${like.getName} -- ")
  }
}

我尝试将likes.getData 更改为likes.getData.iterator,但出现错误org.json4s.package$MappingException: Classes defined in method bodies are not supported.

我需要做什么才能使likes.getData page 返回的迭代器成为结果,以便我可以映射所有这些结果?

【问题讨论】:

    标签: java scala iterator restfb scala-java-interop


    【解决方案1】:

    尝试使用JavaConverters 而不是JavaConversions

    import scala.collection.JavaConverters._
    
    val data = likes.getData.asScala.map(like => s"id=${like.getId}, name=${like.getName} -- ")
    

    【讨论】:

    • 还是一样:-(
    【解决方案2】:

    我还需要映射连接,即:

    likes.flatMap(likeConn => likeConn.map(like => 
      s"id=${like.getId}, name=${like.getName} -- "))
    

    然后它会自动分页。

    【讨论】:

    • 那是因为 Connection 是一个页面,并且在该页面上您可以找到一些项目(在您的情况下为 Like)。因此,您需要遍历页面,然后遍历每页的项目。
    猜你喜欢
    • 2014-07-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-29
    • 2013-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多