Scala--简介---(1)

Scala语言简介与WordCount示例

#scala简介
Scala是一种多范式的编程语言,其设计的初衷是要集成面向对象编程和函数式编程的各种特性。Scala运行于Java平台(Java虚拟机),并兼容现有的Java程序。
#为什么要学Scala

  1. 优雅:这是框架设计师第一个要考虑的问题,框架的用户是应用开发程序员,API是否优雅直接影响用户体验。
  2. 速度快:Scala语言表达能力强,一行代码抵得上Java多行,开发速度快;Scala是静态编译的,所以和JRuby,Groovy比起来速度会快很多。
  3. 能融合到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
微信扫一扫关注我,没事可以玩玩小游戏



我想去流浪,我想去读书,若有机会,江湖再见
扫一扫,领取红包,就当奖励你我付出的努力

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值