2

我是 scala mongodb 的新手,我的代码是

while(result.hasNext)
      {    
if(result.next().containsField("profilepic"))
       bl+=result.next().get("profilepic").toString()
}

它适用于下一个,但 curr() 怎么样。我没有找到任何我想要这样的方法

bl+=result.curr().get("profilepic").toString()

但是在 scala 中,它们没有诸如 curr() 之类的任何替代方法吗?

4

1 回答 1

0

免责声明:我对 Scala 相当陌生,但拥有更丰富的 Java 经验。

我猜你的代码的问题是你next()在循环的每次迭代中调用了两次(所以你对两个元素采取行动),而你的意图显然是对一个元素采取行动。此代码可能对您有用:

while(result.hasNext) {
    val curr = result.next
    if(curr.containsField("profilepic")) {
        bl += curr.get("profilepic").toString()
    }
}

阅读以下有关Iterator语义的部分:http ://www.scala-lang.org/docu/files/collections-api/collections_43.html

要理解的重要一点是,每次next调用 anIterator都会产生一个新元素:

val result = Iterator("foo", "bar", "baz")
result.next == "foo" // true
result.next == "bar" // true

在您的情况下,您希望多次对同一元素采取行动。将它存储在一个变量中(例如curr),并确保next在每次迭代期间只调用一次。

于 2013-08-29T10:14:43.277 回答