Scala第二天
1、 字符串拼接
scala形式 :
val s = "java"
val a = 123
val x = 3.14
// 格式: s - 方法 $ - 引用符,引用外面的变量
val sax = s"$s $a $x"
// 想在中间再加上字符
val sdd = s"$s ${d}+1 $f"
println(sax) // java 123 3.14
println(sdd) // java 123+1 3.14
2、 scala -- 面向对象编程 / 面向函数编程
面向对象编程 : 将对象传来传去 , 调用一个方法传递的是一个对象,返回值的也是一个对象
(1) 将对象作为参数
(2) 将对象作为返回值
面向函数编程 : 将函数传来传去 --- 高阶函数
(1) 以函数作为参数 (** 很重要 **)
(2) 以函数作为返回值 (知道就行)
lambda表达式 --- 匿名表达式
定义即调用
foreach : 循环数组,按照顺序将数组中的元素一个一个传给后面括号中的函数
array.foreach(println)
3、
(1) map() : 循环数组,将数组中的元素一个一个传递给后面的函数,函数的返回值会构建成一个新的数组
-- 数据量不变 一对一
val ids: Array[String] = students.map(student => student.split(",")(0))
(2) filter() : 将数组中的元素一个一个传递给后面的函数
如果函数返回True保留数据
如果函数返回False过滤数据
-- 数据(可能)会变少
val filterStudent: Array[String] = students.filter(s => "文科一班".equals(s.split(",")(4)))
(3) flatMap() : 将集合中的元素一个一个传递给后面的函数, 函数的返回值必须是一个集合, 然后将返回的集合展开成一个新的集合
先是 map -- 返回一个数组
再是 flat -- 再展开
-- 将数据一行变多行 一对多
val words: List[String] = lines.flatMap(line => line.split(","))
4、集合 -- 可变(mutable) / 不可变(immutable)
(1) list : 有序不唯一 -- 不可变
(2) set : 无序唯一 -- 不可变
(3) Map : kv格式
(4) Tuple : 元组, 固定长度的集合
// 1、 List 集合 -- 不可变
val list = List(1, 2, 3, 4, 5, 6, 7, 8, 9)
// 2、创建一个无序唯一的set集合 -- 不可变
val set = Set(1, 2, 3, 3, 1, 1, 4)
// 3、创建一个元组
val t: (Int, Int, Int, Int, Int, Int) = (1, 2, 3, 4, 5, 10)
// 4、创建一个不可变的map集合
// ("001", "张三") : 二元组
// "001" -> "张三" : 构建二元组的简写
val map = Map(("001", "张三"), ("002", "李四"), "003" -> "王五")
5、 WordCount 简写
// 链式调用
Source
.fromFile("data/words.txt") // 读取文件
.getLines() // 获取所有行
.toList // 转换成List集合
.flatMap(line => line.split(",")) // 一行变多行
.groupBy(word => word) // 以单词分组 (word, List(words)))
.map(kv => (kv._1, kv._2.length)) // 统计单词数量 (word, countNum)
.foreach(println)