Sri*_*Sri 6 java scala twitter4j
我在Scala项目中使用Java Twitter4J库.
我正在调用这个方法
twitter.getFriendsStatuses()
Run Code Online (Sandbox Code Playgroud)
此方法返回包含状态的twitter4j.User对象列表.
我尝试迭代它们,它在第一个元素上进行无限循环:
val users:List[User] = twitter.getFriendsStatuses(userId, paging.getSinceId())
while( users.iterator.hasNext() ) {
println(users.iterator.next().getStatus())
}
Run Code Online (Sandbox Code Playgroud)
有任何想法吗?
axt*_*avt 26
我猜users.iterator每次评估时都会生成新的迭代器.试试这个:
val it = users.iterator
while(it.hasNext() ) {
println(it.next().getStatus())
}
Run Code Online (Sandbox Code Playgroud)
Bri*_*Hsu 18
如果使用Scala 2.8,则可以使用JavaConversion自动将Java集合转换为Scala集合.
防爆.
import scala.collection.JavaConversions._
// Java Collection
val arrayList = new java.util.ArrayList[Int]
arrayList.add(2)
arrayList.add(3)
arrayList.add(4)
// It will implicitly covert to Scala collection,
// so you could use map/foreach...etc.
arrayList.map(_ * 2).foreach(println)
Run Code Online (Sandbox Code Playgroud)
什么是错的
users.foreach(user => println(user.getStatus()))
Run Code Online (Sandbox Code Playgroud)
甚至
users.map(_.getStatus()).foreach(println _)
Run Code Online (Sandbox Code Playgroud)
或者,如果你担心两次遍历集合
users.view.map(_.getStatus()).foreach(println _)
Run Code Online (Sandbox Code Playgroud)
IOW:你为什么要自己管理迭代(并且可能犯错误),当你可以让别人为你做这项工作时?