(1)打印九九乘法表
object MutilTable
{
def
main(args
: Array
[String
]): Unit
= {
for(i
<- 1 to
9){
for(j
<- 1 to i
){
print(j
+"*"+i
+ "=" + i
*j
+"\t")
}
println()
}
}
}
简写
for(i
<- 1 to
9; j
<- 1 to i
){print(j
+"*"+i
+ "=" + i
*j
+"\t"); if(i
==j
) println()}
(二)worldCount实现
1.推演过程
val array
= Array("hello huangbo", "hello xuzheng", "hello wangbaoqiang")
val array2
=array
.map((x
:String
) => x
.split(" "))
val array3
= array2
.flatten
val array4
= array3
.map((x
:String
) => (x
,1))
val array5
= array4
.groupBy((x
:(String
,Int
)) => x
._1
)
val array6
= array5
.map((x
:(String
,Array
[(String
, Int
)])) => (x
._1
,x
._2
.length
))
println(array6
.toString
)
2.综合起来
array
.map((x
:String
) => x
.split(" ")).flatten
.map((x
:String
) => (x
,1)).groupBy((x
:(String
,Int
)) => x
._1
).map((x
:(String
,Array
[(String
, Int
)])) => (x
._1
,x
._2
.length
))
3.两个简化点
a. 其中,array.map(x => x.split(" “)).flatten效果和array.flatMap(x => x.split(” "))一致:
b. 通过mapValues方法,直接作用于Map的value值,只改变value值到目标形式:
简化后的最终结果
scala
> array
.flatMap(x
=> x
.split(" ")).map(x
=> (x
,1)).groupBy(x
=> x
._1
).mapValues(x
=> x
.length
)
res137
: scala
.collection
.immutable
.Map
[String
,Int
] = Map(xuzheng
-> 1, huangbo
-> 1, wangbaoqiang
-> 1, hello
-> 3)
继续精简
a. 先补充方法
fold,foldLeft,foldRight:第一个括号是初始值,第二个括号中是聚合函数
fold和reduce相似,只是要传入两个参数,第一个参数相当于sum 由下图可以看出,fold和reduce是很相似的(同种类型情况下),fold第二个括号里面必须是相同的类型最终返回的也是同种类型 而foldLeft第二个括号中的连个参数第一个必须是Int类型的(因为它始终和第一个括号中的数字相互赋值,所以必须与第一个括号里数值同种类型),y是轮询集合里面的元素,可以是其他类型 foldRight则是x从右面轮询集合里面的元素 b. 如下图所示,通过fold可以避免当(hello,3)等情况,不能使用数组的长度来统计结果
将得到的结果按照统计的数值大小排序 先把Map转换为数组 通过sorted方法排序 将按照List元素,即元组的第一个元素按照字典顺序排序 通过sortBy方法排序 通过sortWith排序