Scala简单单机actorwordcount

来源:互联网 发布:彭德怀朝鲜战争知乎 编辑:程序博客网 时间:2024/06/06 09:19
import scala.actors.{Actor, Future}import scala.collection.mutable.{HashSet, ListBuffer}import scala.io.Sourceclass 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 class SubmitTask(filename : String)case class ResultTask(result : Map[String, Int])case object StopTaskobject ActorWordCount {  def main(args: Array[String]): Unit = {    val replySet = new HashSet[Future[Any]]()    val resultList = new ListBuffer[ResultTask]()    val files = Array[String]("f://words.txt", "f://words.log")    for (f <- files) {      val actor = new Task      val reply = actor.start() !! SubmitTask(f)      replySet += reply    }    while (replySet.size > 0) {      val toCompute = replySet.filter(_.isSet)      for (f <- toCompute) {        val result = f.apply().asInstanceOf[ResultTask]        resultList += result        replySet -= f      }      Thread.sleep(100)    }    //汇总功能    val fr = resultList.flatMap(_.result).groupBy(_._1).mapValues(_.foldLeft(0)(_+_._2))    println(fr)  }}
原创粉丝点击