神刀安全网

使用Scala实现Java项目的单词计数

其实我想找一门“具有Python的简洁写法和融合Java平台的优势, 同时又足够有挑战性和灵活性”的编程语言。 Scala 就是一个不错的选择。本文使用 Scala 实现 Java 项目的单词计数。

Scala 一些特点:

1.  可以容易地与 Java 互操作;

2.  不必写分号;

3.  属性在前,类型在后; “先思考模型,后确定类型” 的思想;

4.  无参函数调用只用写函数名,不必写()

5.  常用结合: Array, ArrayBuffer, mutable.List, immutable.List, mutable.Map, mutable.HashMap, immutable.HashMap, Tuple

访问 Array 或 Map , 使用 array(0) = "xxx" 或 map("key") = "value" ; 访问 Tuple 使用 ._1, ._2, … 第一个索引为一

6.  使用 map, filter 方法进行映射或过滤处理; 组合起来很强大!

7.  使用 iter.foreach { e => func(e) } 进行遍历处理;

8.  使用 object YourAPP extends App { //code } 实现 Main 函数 。

9.  多看文档。

 package scalastudy.basic  import scala.collection.immutable.List import scala.collection.mutable import scala.collection.mutable.{ArrayBuffer, Map, HashMap} import java.io.File  /**  * Created by lovesqcc on 16-3-19.  */ object WordStat extends App {    val seps = " -!/"#$%&()*,./:;?@[]^_`{|}~+<=>//".toArray    launch()    def launch(): Unit = {     val path = "/home/lovesqcc/work/java/ALLIN/src/main/java/"     val files = fetchAllJavaFiles(path)     //files.foreach { println }      val allWords = files.map(readFile(_)).map(analysisWords(_)).flatten.toList     sortByValue(statWords(allWords)).map(println)   }    def fileJavaFile(filename:String, suffix:String): Boolean = {     return filename.endsWith(suffix)   }    def fetchAllJavaFiles(path:String): Array[String] = {     val javaFilesBuf = ArrayBuffer[String]()     fetchJavaFiles(path, javaFilesBuf)     return javaFilesBuf.toArray   }    def fetchJavaFiles(path:String, javafiles:ArrayBuffer[String]):Unit = {     val dirAndfiles = new File(path).listFiles     if (dirAndfiles.length > 0) {       val files = dirAndfiles.filter(_.isFile)       if (files.length > 0) {         javafiles ++= files.map(_.getCanonicalPath).filter(fileJavaFile(_,".java"))       }        val dirs = dirAndfiles.filter(_.isDirectory)       if (dirs.length > 0) {         dirs.map(_.getCanonicalPath).foreach { dirpath =>           fetchJavaFiles(dirpath, javafiles) }       }     }   }     def readFile(filename:String): String = {     import scala.io.Source     val fileSource =  Source.fromFile(filename)     try {       return fileSource.mkString     } finally {       fileSource.close()     }   }    def analysisWords(content:String):List[String] = {     return splitText(content, WordStat.seps);   }    def statWords(words: List[String]):Map[String,Int] = {     val wordsMap = new HashMap[String,Int]     words.foreach { w =>       wordsMap(w) = wordsMap.getOrElse(w,0) + 1     }     return wordsMap   }    def splitText(text:String, seps:Array[Char]): List[String] = {     var init = Array(text)     seps.foreach { sep =>       init = init.map(_.split(sep)).flatten.map(_.trim).filter(s => s.length > 0)     }     return init.toList   }    def sortByValue(m: Map[String,Int]): Map[String,Int] = {     val sortedm = new mutable.LinkedHashMap[String,Int]     m.toList.sortWith{case(kv1,kv2) => kv1._2 > kv2._2}.foreach { t =>       sortedm(t._1) = t._2     }     return sortedm   }  } 

转载本站任何文章请注明:转载至神刀安全网,谢谢神刀安全网 » 使用Scala实现Java项目的单词计数

分享到:更多 ()

评论 抢沙发

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址
分享按钮