无法在 Scala 中迭代 Java 列表
我在 Scala 项目中使用 Java Twitter4J 库。
我正在调用方法
twitter.getFriendsStatuses()
此方法返回包含状态的 twitter4j.User 对象列表。
我尝试迭代它们,它在第一个元素上无限循环:
val users:List[User] = twitter.getFriendsStatuses(userId, paging.getSinceId())
while( users.iterator.hasNext() ) {
println(users.iterator.next().getStatus())
}
有什么想法吗?
I'm using the Java Twitter4J library in a Scala project.
I'm calling the method
twitter.getFriendsStatuses()
This method returns a list of twitter4j.User objects containing statuses.
I try to iterate over them and it goes in an infinite loop over the first element:
val users:List[User] = twitter.getFriendsStatuses(userId, paging.getSinceId())
while( users.iterator.hasNext() ) {
println(users.iterator.next().getStatus())
}
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(5)
我猜
users.iterator
每次评估时都会生成新的迭代器。试试这个:I guess
users.iterator
produces the new iterator each time it's evaluated. Try this:如果您使用 Scala 2.8,则可以使用 JavaConversion 自动将 Java 集合转换为 Scala 集合。
前任。
If you use Scala 2.8, you could use JavaConversion to convert Java collection to Scala collection automatically.
Ex.
或有什么问题呢
just或 Even
如果您担心两次遍历集合,那么
? IOW:当您可以让其他人为您完成工作时,为什么要自己管理迭代(并且可能会犯错误)?
What's wrong with just
or even
or, if you're worried about traversing the collection twice
IOW: Why do you want to manage the iteration yourself (and possibly make mistakes), when you can just let someone else do the work for you?
与 scala.collection.JavaConversions 相比,我更喜欢 scalaj-collection。这使得转换变得明确:
可在此处获取:https://github.com/scalaj/scalaj-collection
I prefer scalaj-collection to scala.collection.JavaConversions. This makes the conversions explicit:
Available here: https://github.com/scalaj/scalaj-collection
我建议使用
scala.collection.JavaConverters._
并简单地将 .asScala 添加到您想要迭代的每个对象中
I suggest using
scala.collection.JavaConverters._
and simply add
.asScala
to every object you wish to iterate