6

ScalaプロジェクトでJavaTwitter4Jライブラリを使用しています。

メソッドを呼び出しています

twitter.getFriendsStatuses()

このメソッドは、ステータスを含むtwitter4j.Userオブジェクトのリストを返します。

私はそれらを反復しようとします、そしてそれは最初の要素の上で無限ループに入ります:

val users:List[User] = twitter.getFriendsStatuses(userId, paging.getSinceId())
while( users.iterator.hasNext() ) {
  println(users.iterator.next().getStatus())
}

何か案は?

4

5 に答える 5

27

users.iterator評価されるたびに新しいイテレータが生成されると思います。これを試して:

val it = users.iterator
while(it.hasNext() ) {
   println(it.next().getStatus())
}
于 2011-03-14T13:38:36.547 に答える
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)
于 2011-03-14T15:21:05.867 に答える
8

何が問題なのですか

users.foreach(user => println(user.getStatus()))

あるいは

users.map(_.getStatus()).foreach(println _)

または、コレクションを2回トラバースすることを心配している場合

users.view.map(_.getStatus()).foreach(println _)

IOW:他の誰かに仕事を任せることができるのに、なぜ自分でイテレーションを管理したいのですか(そしておそらく間違いを犯したいのですか)?

于 2011-03-14T14:14:50.927 に答える
4

私はscala.collection.JavaConversionsよりscalaj-collectionを好みます。これにより、変換が明示的になります。

import scalaj.collection.Implicits._

val arrayList = new java.util.ArrayList[Int]
arrayList.add(2)
arrayList.add(3)
arrayList.add(4)

arrayList.asScala.map(_ * 2).foreach(println)

ここで入手可能:https ://github.com/scalaj/scalaj-collection

于 2011-03-14T16:11:27.797 に答える
1

使用することをお勧めします

scala.collection.JavaConverters._

.asScala繰り返したいすべてのオブジェクトに追加するだけです

于 2014-12-11T11:15:38.217 に答える