酷炫的一行代码 - Scala就是这么任性!

1. 过滤出序列中所有偶数

filter方法会将序列中各个元素依次替换到下划线"_"所处位置,如果返回true,则保留该元素。

(1 to 9).filter( _ % 2 == 0 )

输出:2, 4, 6, 8 

2. 对序列中所有元素求和

reduceLeft是一个通用的聚集计算方法,你可以把"+"换成其它的运算。其实对于求和有更简单的方法,请参考第6条。

(1 to 9).reduceLeft(_ + _)

输出:45

3. 统计单词出现次数

groupBy方法可以将序列转换成Map,适合用在需要按某个属性进行统计的情况。

List("no", "zuo", "no", "die").groupBy(w => w).mapValues(_.length)

输出:Map(no -> 2, zuo -> 1, die -> 1)

4. 将序列中单词首字母大写

map可以把序列转换成另一个序列,在map方法中定义各个元素的转换过程。

List("one", "line", "of", "code").map(_.capitalize)

输出:List(One, Line, Of, Code)

5. 将序列拼接成字符串 

mkString方法用于将序列拼接成字符串,第1个参数是起始符号,第2个参数是分隔符,第3个参数是结束符号。

(1 to 9).mkString("(", ",", ")")

输出:(1,2,3,4,5,6,7,8,9)

6. 最大值,最小值和求和 

这在Scala中轻而易举,直接调用min,max和sum方法。

List(14, 35, -7, 46, 98).min 
List(14, 35, -7, 46, 98).max 
List(14, 35, -7, 46, 98).sum

输出:-7 98 186

7. 获取序列中最大的前3个数值和位置

zipWithIndex方法将序列List[Int]转换成List[(Int, Int)],即List[Tuple2[Int, Int]]。Tuple2的第1个Int是元素,第2个Int是元素所处的位置。

List(2, 0, 1, 4, 12, 5).zipWithIndex.sorted.reverse.take(3)

输出:List((12,4), (5,5), (4,3))

8. 读取文本文件 

在Scala中读取文本文件相当轻松。

val fileContent = io.Source.fromFile("myfile.txt").mkString
val fileLines = io.Source.fromFile("myfile.txt").getLines.toList

9. 下载URL链接

下载文件就是这么容易。其实利用sys.process包,我们可以用Scala编写Shell脚本,是不是很酷!

import sys.process._
import java.net.URL
import java.io.File
new URL("http://www.oschina.net/favicon.ico") #> new File("d:/favicon.ico") !!

10. 并行计算

par方法将原序列转换成并行序列,可以利用多核的优势加快处理速度,真是想得太周到了!

(1 to 99).par.sum

输出:4950 

11. 两个List相乘求和

    类似加权求和。

dataList.zip(weightList).map{t => t._1 * t._2}.sum

12. 按多个字段排序List

先按学生的年龄排序,如果年龄相同,则按分数排序:

    case class Student(name: String, age: Int, score: Int)
    List(
      Student("a", 14, 60), 
      Student("b", 15, 80), 
      Student("a", 15, 70)
    ).sortBy(s => (s.age, s.score))

输出:List(Student(a,14,60), Student(a,15,70), Student(b,15,80))

13. 将List相邻元素分组

每相邻的10个元素分成一组:

val list = (0 to 20).map(_.toString)
list.zipWithIndex.map(t => t._1 -> ((t._2 / 10) * 10)).groupBy(_._2).toList.sortBy(_._1).map(_._2.map(_._1))

输出:

Vector(0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
Vector(10, 11, 12, 13, 14, 15, 16, 17, 18, 19)
Vector(20)

14. 取序列的第1个元素

List(1, 2, 3).headOption.getOrElse(0)

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏五分钟学算法

每天一算:Evaluate Reverse Polish Notation

我们会在每天早上8点30分准时推送一条LeetCode上的算法题目,并给出该题目的动画解析以及参考答案,每篇文章阅读时长为五分钟左右。

8410
来自专栏赵俊的Java专栏

搜索插入位置

18610
来自专栏小二的折腾日记

牛客网-剑指offer-11

要求出第N个丑数,显然就要求到这N个,所以就要把所有的找出来嘛。简单的办法,就是2,3,5的倍数,但是这些倍数出来的丑数的顺序,这时候需要排序。显然不能直接对所...

8230
来自专栏恰童鞋骚年

剑指Offer面试题:13.调整数组顺序使奇数位于偶数前面

  例如有以下一个整数数组:12345,经过调整后可以为:15342、13542、13524等等。

12560
来自专栏数据结构与算法

P3373 【模板】线段树 2 区间求和 区间乘 区间加

题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.将某区间每一个数乘上x 3.求出某区间每一个数的和 输入输出格式 输...

419110
来自专栏Python小屋

Python中lambda表达式的常见用法

非常抱歉,昨天发的代码中有一处小错误,已通过留言的方式进行了纠正,详情请见【详解Python列表推导式】 lambda表达式常用来声明匿名函数,即没有函数名字的...

38190
来自专栏Jack-Cui

第七天、判断三角形的类型

    根据输入的三角形的三条边判断三角形的类型,并输出它的面积和类型。 C代码: /*第七天、判断三角形的类型*/ #include <stdio.h> ...

23200
来自专栏Python爬虫与算法进阶

说一道排序题

关于Python的sorted排序算法,这篇文章讲的比较详细:python sort函数内部实现原理,说到Python使用的是著名的Timesort算法。

9420
来自专栏C语言及其他语言

数组

1、 一维数组的定义和使用 通过对前面知识的学习,我们已经知道如何定义和使用一个一个的各种变量,但总有不够用的时候。举个例子,我要记录一个班32个同学C语...

43780
来自专栏web前端教室

js数组去重的思路与缓动公式

前端开发的面试中,至少有一类题是必出的,那就是去重。什么叫去重呢?就是把一组字符串中重复出现的,都删除掉。 这种题重要的是解决的思路要正确,思路正确的话其实也很...

24980

扫码关注云+社区

领取腾讯云代金券