package actor
import scala.actors.Actor
import scala.actors.Future
import scala.collection.mutable.{HashSet, ListBuffer}
import scala.io.Source
class Task extends Actor{
override def act(): Unit = {
loop{
react{
case SubmitTask(fileName) =>{
val result = Source.fromFile(fileName).getLines().flatMap(_.split(" "))
.map((_,1)).toList.groupBy(_._1).mapValues(_.size)
sender ! ResultTask(result)
}
case StopTask => exit()
}
}
}
}
case object StopTask
case class SubmitTask(fileName:String)
case class ResultTask(result:Map[String,Int])
object ActorWordCount {
def main(args: Array[String]): Unit = {
val replySet = new HashSet[Future[Any]]()
//汇总
val resultList = new ListBuffer[ResultTask]()
val files = Array[String]("C:\\Users\\luoyunfan\\Desktop\\1.txt","C:\\Users\\luoyunfan\\Desktop\\2.txt","C:\\Users\\luoyunfan\\Desktop\\3.txt")
for(f<-files){
val actor = new Task
val reply = actor.start() !! SubmitTask(f)
replySet += reply
}
while(replySet.size>0){
val q = replySet.filter(_.isSet)
for(f <- q){
val result = f.apply().asInstanceOf[ResultTask]
resultList+=result
println(resultList)
replySet-=f
}
Thread.sleep(100)
}
//汇总的功能
val res = resultList.flatMap(_.result).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))
println(res)
}
}