#scala简介
Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。
#为什么要学Scala
- 优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。
- 速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以和JRuby,Groovy比起来速度会快很多。
- 能融合到Hadoop生态圈:Hadoop现在是大数据事实标准,Spark并不是要取代Hadoop,而是要完善Hadoop生态。JVM语言大部分可能会想到Java,但Java做出来的API太丑,或者想实现一个优雅的API太费劲。
下面我以最经典的wordcount为例,来表现Scala的简洁和优雅
- 经典例题(wordcount)
请统计以下的单词的个数:
a a a b b b c c a c d e r t s d x s a a b b c c a a b b c c
得到类似如下的结果:
a:8
b:7
r:1
c:7
s:2
d:2
t:1
e:1
x:1 - 下面我用Java代码实现
思路:详见代码注释
import java.util.HashMap;
import java.util.Map;
import java.util.Set;
public class WordCount {
public static void main(String[] args) {
//将要统计的单词文本存到一个String类型的words里
String words="a a a b b b c c a c d e r t s d x s a a b b c c a a b b c c";
//将其按空格切开,得到String数组
String[] split = words.split(" ");
//我们利用HashMap的特性来统计单词
HashMap<String, Integer> wordMap = new HashMap<>();
for (String word :split) {
if (wordMap.get(word)==null){
//如果是第一次统计,则单词个数为1
wordMap.put(word,1);
}else {
//如果不是第一次,则单词个数加一
wordMap.put(word,wordMap.get(word)+1);
}
}
//得到的结果保存在了wordMap,遍历结果即可
Set<Map.Entry<String, Integer>> result = wordMap.entrySet();
for (Map.Entry<String, Integer> e:result) {
System.out.println(e.getKey()+":"+e.getValue());
}
}
}
- 如果我们使用Scala来实现
神奇的事情发生了,让我们来一起见证奇迹
Scala代码非常的简洁,如果我们在Windows上安装了Scala的话,我们可以直接在cmd窗口运行
val arrs=Array("a a a b b b c c a c d e r t s d x s a a b b c c a a b b c c")
arrs.map(_.split(" ")).flatten.map((_,1)).groupBy(_._1).toList.map(x=>(x._1,x._2.map(_._2).sum))
(这是我在cmd窗口上运行的)结果为:
scala> val arrs=Array("a a a b b b c c a c d e r t s d x s a a b b c c a a b b c c")
arrs: Array[String] = Array(a a a b b b c c a c d e r t s d x s a a b b c c a a b b c c)
scala> arrs.map(_.split(" ")).flatten.map((_,1)).groupBy(_._1).toList.map(x=>(x._1,x._2.map(_._2).sum))
res246: List[(String, Int)] = List((e,1), (s,2), (x,1), (t,1), (a,8), (b,7), (c,7), (r,1), (d,2))
刚入门的可能还看不懂我写了啥,不过没有关系。我们可以看到我们仅仅写了两行代码,就已经实现了Java的n多行的冗余代码,可见Scala的强大。
既然Scala如此强大,那我们就赶紧来学习一下吧!
我的GitHub
QQ:2541692705
邮箱:loyalwilliams@163.com
微信扫一扫关注我,没事可以玩玩小游戏
我想去流浪,我想去读书,若有机会,江湖再见
扫一扫,领取红包,就当奖励你我付出的努力