scala集合Iterable-API

本文主要探讨Scala中Iterable接口的使用,包括如何创建Iterable对象、介绍其抽象方法、其他迭代器操作、子容器操作和拉链方法,并通过实例进行对比分析,强调迭代器一次性迭代的特性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Iterable新增的接口不多,这篇是Iterable API的用例,还是来一张scala抽象接口图:

在这里插入图片描述

注意:迭代器有一个很重要的特点是,数据迭代一次就不存在了

创建两个Iterable,默认实现是List
val i1 = Iterable(1,2,3,4,5)
val i2 = Iterable(6,7,8,9,10)
1.抽象方法
    //迭代输出每个数据  结果:12345
    i1.iterator.foreach(print(_))
    //获取List的迭代器
    val iterator = i1.iterator
    //判断是否还有数据 结果:12345
    while(iterator.hasNext) {
      //next获取下一个数据
      print(iterator.next())
    }
2.其它迭代器
    //按n个元素拆分开,组成多个迭代器, Iterator[Iterable[Int]]
    //例子按2个元素分,分成了3个Iterable,结果:Iterator(Iterable(1,2),Iterable(3,4),Iterable(5))
    val groupIter = i1.grouped(2)
    //对每个迭代器进行打印
    /**
      * 结果:
      * (iter size:2,data is:)12
        (iter size:2,data is:)34
        (iter size:1,data is:)5
      */
    groupIter.foreach(iter => {
      print("iter size:"+iter.size,"data is:")
      iter.foreach(print(_))
      println()
    })
    //按下标截取迭代器,不包括右边边界,比如参数(0,2),则取下标为0,1的值
    //结果:sliceGroup: Iterable[Int] = List(1, 2)
    val sliceGroup = i1.slice(0,2)
3.子容器
    //从右边开始获取n个值,组成新集合,
    // 例子:取右边2个数 ,结果:takeRight: Ierable[Int] = List(4, 5)
    val takeRight = i1.takeRight(2)
    //除了右边n个值不要,其它保留,组成新集合
    //例子:除右边两个,结果:dropRight: Iterable[Int] = List(1, 2, 3)
    val dropRight = i1.dropRight(2)
4.拉链方法
    val i3 = Iterable(2,3,4,5)
    val i4 = Iterable(6,7,8,9,10,11)
    //以数量小的集合为size,把两个集合下标相同的组合起来
    //结果:zip: Iterable[(Int, Int)] = List((2,6), (3,7), (4,8), (5,9))
    val zip = i3.zip(i4)

    //生成以数量大的集合为size,左边的集合不够用第二个参数补,右边的集合不够用第三个参数补
    //例子:i3数量小,用2来补,结果:zipAll: Iterable[(Int, Int)] = List((2,6), (3,7), (4,8), (5,9), (2,10), (2,11))
    val zipAll = i3.zipAll(i4,2,5)

    //值和下标进行组合,结果:res1: Iterable[(Int, Int)] = List((2,0), (3,1), (4,2), (5,3))
    val zipWithIndex = i3.zipWithIndex
5.对比
     val i3 = Iterable(2,3,4,5)
     val i4 = Iterable(2,3,4,5)
     //判断两个集合元素和元素顺序是否都一样
     //结果:res1: Boolean = true
     i3.sameElements(i4)
     val i5 = Iterable(2,4,3,5)
     val i6 = Iterable(2,3,4,5)
     //结果:res1: Boolean = false
     i5.sameElements(i6)

源码地址

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值