def main(args: Array[String]): Unit = {
// TODO Scala 集合 常用方法
val list = ListBuffer(1,2,3,4,5)
// 28. map: 映射, 将集合通过计算(转换规则)转换成另外一个集合.
var result = for(i <- list) yield {
"*" * i
}
println(result)
list.map((i:Int)=>{"*" * i})
println(list.map("*" * _))
// 29. flatten: 扁平化, 将集合中的整体(集合)拆分成一个一个的个体
var list2 = List(List(1,2),List(3,4))
// List(1,2,3,4)
println(list2.flatten)
val list3 = List(List(List(1,2)),List(List(3,4)))
println(list3.flatten.flatten)
val list4 = List("hello scala","hello spark")
// List("hello","scala","hello","spark")
println(list4.flatten)
// 30. flatMap: 集合扁平映射。
println(list4.flatMap(str => {str.split(" ")}))
println(list4.flatMap(_.split(" ")))
var list5 = List(List(1,2),List(3,4))
def myflatmap(ls:List[Int]):List[Int]={
ls.map(_ * 2 )
}
println(list5.flatMap(myflatmap))
//list5.flatMap(element=>element.map(_ * 2))
println(list5.flatMap(_.map(_ * 2)))
// 31. filter: 集合过滤数据, 按照指定的规则对集合中的元素进行过滤,
// 满足规则的数据保留,不满足规则的数据丢弃
val list6 = List(1,2,3,4)
// 过滤偶数
//println(list6.filter((i: Int) => {i % 2 == 0}))
println(list6.filter( _ % 2 == 0))
val list7 = List("hello","hello","scala","haha")
println(list7.filter(_.startsWith("h")))
val list8 = List("hello scala","hello spark")
println(list8.flatMap(_.split(" ")).filter(_.startsWith("s")))
// 32.groupBy: 分组, 按照指定的分组规则, 对集合中的元素进行分组, 返回的一个map,
// map的key就是分组规则计算的结果, map的value就是每组的数据(集合)
val list9 = List(1,2,3,4,5,6,7,8,9)
//按照集合元素对3取余的结果进行分组
println(list9.groupBy((i: Int) => {i % 3}))
val list10 = List("hello","hello","scala","haha","hive","scala","hello")
//按照单词分组
println(list10.groupBy(str => str))
//println(list10.groupBy(_ => {"haha"}))
//println(list10.groupBy(_))
//33. sortBy: 集合排序, 按照指定的排序规则将集合中的元素进行排序
val list11 = List(3,1,4,2)
//println(list11.sortBy((i: Int) => {i}))
println(list11.sortBy(i => i)) // 默认升序
println(list11.sortBy(i => -i)) // 降序
println(list11.sortBy(i=>i)(Ordering.Int.reverse))
val list12 = List((30,"zhangsan"),(20,"wangwu"),(20,"lisi"))
println (list12.sortBy(t=>t) {
Ordering.Tuple2(Ordering.Int.reverse, Ordering.String.reverse)
})
//34. sortWith: 自定义排序
val list13 = List((30,"zhangsan"),(20,"wangwu"),(20,"lisi"))
// 希望升序排序 left < right , 希望降序排序 left > right
println(list13.sortWith((left, right) => {
if (left._1 == right._1) {
left._2 > right._2
} else {
left._1 < right._1
}
}))
}