2017-05-17 12 views
0

私が持っている機能がScalaエラーは型の不一致を変換します。見つかった:()⇒イテレータ[ロング]は必要:[?] scala.collection.immutable.Iterableの

から呼び出され

`

def getFollowers(userId: Long): Try[Set[Long]] = { 
     Try({ 
     val followerIds = mutable.Set[Long]() 
     var cursor = -1L 
     do { 
      val client = AkkaStreamTwitterClient() 
      val res = client.friendsFollowers().getFollowersIDs(userId, cursor, 5000) 
      res.getIDs.toList.foreach(x => followerIds.add(x)) 
      if (res.hasNext) { 
      cursor = res.getNextCursor 
      } 
      else { 
      cursor = -1 // Exit the loop 
      } 
     } while (cursor > 0) 
      val immutableFollower = scala.collection.immutable.Set(followerIds.toSet.toArray:_*) 
      immutableFollower   
     }) 
    } 

`

機能

`

Source(() => 
AkkaStreamTwitterHelper.getFollowers(userId).get.toIterable.iterator) 
    .grouped(100) 
    .map(x => AkkaStreamTwitterHelper.lookupUsers(x.toList)) 
    .mapConcat(identity(_)) 
    .runForeach(x => output.offer(x.getScreenName)) 
    .onComplete({ 
    case _ => 
     Console.println(s"Fetched ${output.size()} profiles") 
     val endTime = System.nanoTime() 
     Console.println(s"Time taken: ${(endTime - startTime)/1000000000.00}s") 
     system.terminate() 
     Runtime.getRuntime.exit(0) 
    }) (ec) 
} 

`

ライン「ソース」は、エラーを与える

Scalaのエラー変換型の不一致。見つかった:()⇒イテレータ[ロング]必要:[?] scala.collection.immutable.Iterableのあなたのバージョンに応じて、Source.fromIteratorが必要になる場合があります

http://blog.abhinav.ca/blog/2015/02/19/scaling-with-akka-streams/

答えて

0

から

Iコード。 () => Iteratorではなく、反復子自体:あなたはinteratorを返す目的球を持っているgetFollowers(userId).get.toIterable.iteratorを使用することにより

Source.fromIterator(() => 
    AkkaStreamTwitterHelper.getFollowers(userId).get.toIterator) 
+0

(単にgetFollowers(userId).get.toIterable.iterator()にそれを変更)この機能を適用する必要があり、これは、しかしラインに同じエラーを動かす以外のエラーを修正しました。 .mapConcat(identity(_))。 –

0

。あなたは感謝

+0

"Iterator [Long]はパラメータをとらない"にエラーが変更されます。 –

関連する問題