19.集合常用方法

集合常用方法

基本属性和操作

是否包含

list.contains()

反转

list.reverse()

从左取前面n个元素

list.take()

从右取前面n个元素

list.takeright

根据条件取元素,与模式相关,之后补充。。。。。

list.collect

获取长度

list.length

生成迭代器

list.iterator

生成字符串

list.mkString(",")

list.map()

代码

        // 集合的常用方法
        val list = List(1, 2, 3, 4)

        println(s"list = ${list}")
        //长度
        println(s"list.length = ${list.length}")
        println(s"list.size = ${list.size}")

        //组成部分
  //      list :+5
//        5+:list
        // 头
        println(s"list.head = ${list.head}")
        // 尾 一个集合不是头就是尾
        println(s"list.tail = ${list.tail}")
        println(s"list.tail.tail = ${list.tail.tail}")
        // 最后一个
        println(s"list.last = ${list.last}")
        // 除了最后一个前面的
        println(s"list.init = ${list.init}")

        // 循环遍历,每个集合都有
        // list.iterator
        // list.foreach()

        println(list.mkString(","))

               val list = List(1, 2, 3, 4)

        // 功能
        println(s"list.sum = ${list.sum}")
        println(s"list.max = ${list.max}")
        println(s"list.product = ${list.product}")
        
        
        // 简单 功能 
        
        // 是否包含指定元素
        list.contains()
        println(s"list.contains(2) = ${list.contains(2)}")
        // 反转
        list.reverse
        println(s"list.reverse = ${list.reverse}")
        // 取数据
        println(s"list.take(2) = ${list.take(2)}")
        println(s"(list.takeRight()) = ${(list.takeRight(2))}")
        // 去重
        println(s"list.distinct = ${list.distinct}")
        
        // 根据条件采集数据
       // println(s"list.collect() = ${list.collect()}")

集合的计算函数

求和

list.sum

最大值

list.max

最小值

list.min

乘积

list.product

排序简单

list.sortBy

排序高级

list.sortWith

衍生集合

对一个或多个集合操作后返回一个集合

取头,返回一个元素

list.head

取尾巴,返回一个集合,该集合和原集合相比无头

list.tail

取最后一个元素

list.last

取初始数据,对应tail

list.init

交集,将两个集合中的所有元素放在一起,不去重

list.union(list1)

差集

list1.diff(list2)

zip,拉链,相同位置的组合在一起

list1.zip(list2)

滑动,连续两个元素的sum值

list1.sliding(2)

        val list1 = List(1, 2, 3, 4,3)

        val list2 = List(4, 5, 6, 7)


        // 并集

        println(s"list1.union(list2) = ${list1.union(list2)}")

        // 交集
        println(s"list1.intersect(list2) = ${list1.intersect(list2)}")

        // 差集   左边减去右边
        println(s"list1.diff(list2) = ${list1.diff(list2)}")
        
        // zip, 拉链,相同位置组合到一起
        println(s"list1.zip(list2) = ${list1.zip(list2)}")

        // 滑动,连续的三个数据的sum值, 集合的一部分当成一个整体=>窗口, sliding=>滑动窗口
        println(s"list1.sliding(2) = ${list1.sliding(2)}")

      //  println(s"list1.sliding(2,2) = ${list1.sliding(2, 2)")
        

计算高级函数

过滤,返回值为boolean的函数,为true就保存

list.filter()

转化/映射map(函数=>)对集合中的每一个元素做操作,返回一个新的集合

list.map()

扁平化,将一个集合中的小集合进行扁平化操作

list.flatten()

扁平化+映射 注:flatMap相当于先进行map操作,在进行flatten操作

list.flatMap()

分组(groupBy),分组后为一个key value的形式

list.groupBy(x => x % 2)

简化(规约)

reduce

折叠 折叠, 将集合中的数据和集合外的数据进行聚合,结果类型为集合外的数据类型

list.fold(1)(_ + _)

看到中间值的折叠

list.scan(1)(_ + _)

        // 计算

        val list = List(1, 2, 3, 4)

        // 简化,规约,集合
        // 采用自定义的计算规则,对集合的数据进行聚合操作
        // 采用递归的运算
        println(s"list.reduce((x,y)=>{}) = ${list.reduce((x, y) => {x*y})}")
        // reduce方法要求返回值和参数类型保持一致
        println(s"  list.reduce(_-_) = ${list.reduce(_-_)}")
        println(s"list.reduce((x,y)=>{}) = ${list.reduce((x, y) => {x*10+y})}")
        // 从左往右聚合
        println(s"list.reduceLeft(_-_) = ${list.reduceLeft(_-_)}")
        // 从从右往左聚合
        // 底层是reversed.reduceLeft((x,y)=>option(y,x))
        // (1-(2-(3-(4-5))))
        println(s"list.reduceRight(_-_) = ${list.reduceRight(_-_)}")
        // 如果想要按照字符串相加呢?
 def main(args: Array[String]): Unit = {
        val list = List(1, 2, 3, 4)
        val list2 = List(5, 6, 7, 8)
        val list3 = List(list,list2)

        list.map()

        // 映射,将指定的数据转换为其他的数据
        def tansForm(i : Int): Int ={
            // 集合的map方法会将集合的每一个元素都执行map方法中的逻辑
            i*2
        }






       // println(s"list.map() = ${list.map(tansForm)}")
//        println(s"list.map(_*2) = ${list.map(_*2)}")


        // 扁平化,将一个整体拆分为一个一个的个体,
        println(s"list3.flatten = ${list3.flatten}")
      //  list3.map(list => list.map(_*2).flatten)
        list3.flatten.map(_*2)
        // 扁平映射
        // flatMap等同于将map和flatten融合在一起实现功能
        // 输入的参数为集合中的每一个数据
        // 输出的结果为扁平化的数据集合
        println(s" list3.flatMap(list=>list.map(_*2)) = ${ list3.flatMap(list=>list.map(_*2))}")

        // 过滤,将集合中所有的元素进行逻辑判断,如果为true,保留,false就舍弃
        println(s"list.filter(num=>num%2==0) = ${list.filter(num=>num%2==0)}")
        val list4 = List("spark","Scala","Hadoop")
        println(list4.filter(s=>s.startsWith("S")))
        // 分组
        // 通过指定的规则分组
        // 指定的规则的返回值作为分组的key
       println( list.groupBy(num=>num%2))
        println(list4.groupBy(_.substring(0,1)))

        // 排序,默认为升序
    //    println(list.sortBy(_.))
        // 降序
        //println(list.sortBy(_)(Ordering.Int.reverse))
        val list5 = List("1","2","11","3","22")
        println(list5.sortBy(_.toInt))

        // sortWith
        val student1 = new Student()
        val student2 = new Student()
        student1.id=1
        student2.id=2

        val students = List(student2, student1)

        println(students.sortBy(_.id))

        // 元组可以进行比较,先比较第一个再比较第二个,一次类推
        println(students.sortBy(stu=>(stu.id,stu.id)))

        // 排序复杂
        students.sortWith(
            (left,Right) =>{
                if (left.id<Right.id){
                    true
                }else if (left.id<Right.id){
                    left.name<Right.name
                }else{
                    false
                }

            }
        )

    }
发布了118 篇原创文章 · 获赞 5 · 访问量 7171

猜你喜欢

转载自blog.csdn.net/resilienter/article/details/103784217