26_Scala集合常用API汇总

文章目录

1.mkString

import scala.collection.mutable
val map = mutable.Map(
  ("a", 1),
  ("b", 2),
  ("c", 3)
)
println(map.mkString)   //b -> 2a -> 1c -> 3    原因是map无序

2.size,length,isEmpty,contains

println(map.size)
println(map.isEmpty)
println(map.contains("c"))

map只有size没有length

集合的方法没有()

3.reverse ,length,distinct

//    3.reverse ,length 反转集合,仅适用于有序的序列集合
import scala.collection.mutable.ArrayBuffer
val arr = ArrayBuffer(2, 0, 4, 8)
println(arr.reverse)
println(arr.length)

distinct底层还是使用HashSet

4.获取数据相关

4.1数据准备

val map_las = mutable.Map(
  ("a", 1),
  ("b", 2),
  ("c", 3)
)
val tuple = (2, 0, 4, 8)
val set_las = mutable.Set(2, 0, 4, 8)
val arrayBuffer_las = ArrayBuffer(2, 0, 4, 8)
val list_las = mutable.Seq(2, 0, 4, 8)

//    获取第一个元素
//    tuple获取第一个元素类比map中的第一个元素
    println(tuple._1)
    println(map_las.head._1)
    println(arrayBuffer_las(0))
    println(arrayBuffer_las.head)
    println(list_las.head)
    println(list_las(0))

小结:都支持head、tail方法,上述展示head方法;

通用集合都可通过索引访问包括map(idx);

元组和map的kv键值对对象通过 _idx方法访问;

println(tuple._1)

Scala的tail方法,tail表示除了头以外的所有元素

甚至可以迭代

println(list_las.tail.tail)

4.2准确获取尾部last

4.3 除了最后一个元素不要其他都要

类比tail

同理,init也可以迭代操作

list_las.inits.inits		//逐步的往前获取元素

作者认为元素是一个一个添加的,所以真个集合来说,当最后一个元素进行添加操作,前面所有的元素相对于最终的集合为初始(init)集合; //此处这样理解

学习语言时候,跟着作者思路思考是一种非常有效的学习方法;
scala作者设计的方法有些是根据单词意思设计,有些是根据逻辑设计

4.4从集合获取部分数据

//    4.4从集合获取部分数据
      println(map_las.take(3))
      println(arrayBuffer_las.take(3))
      println(set_las.take(3))
      println(list_las.take(3))

从右边取takeright

println(map_las.takeRight(3))
println(arrayBuffer_las.takeRight(3))
println(set_las.takeRight(3))
println(list_las.takeRight(3))

5.删除数据

5.1删除3个从左边

5.2删除3个右边

我的数据顺序都是2048添加,除了map
set集合由于无序,首元素是0所以最终删除后输出Set(0)

6.切分数据splitAt(n:Int)

将集合切分成2份,第一份拿到n个元素splitAt(n) 最终以元组形式存在

println(set_las.splitAt(1))
println(set_las.splitAt(2)._1)
println(map_las.splitAt(2))
println(arrayBuffer_las.splitAt(2))
println(list_las.splitAt(2))

7.滑动窗口

  • API sliding(windows_size:Int) //返回值是一个迭代器

  • sliding(windows_size : Int , step : Int)

  • --使用场景:获取每连续的 2 条数据

  • 2 0 4 8

  • (2,0) (0,4) (4,8) 滑动获取数据

  • 滑动窗口最终获取的还是原始类型数据

    // 做一个滑动窗口,依次拿两条数据
    val stringToInts = map_las.sliding(2)
    while (stringToInts.hasNext){
    println(stringToInts.next())
    }
    println("=================")

      val iterator = arrayBuffer_las.sliding(2)
      while (iterator.hasNext){
        println(iterator.next()(0))
      }
    
滑动窗口最终获取的还是原始类型数据

滑动一次跳过两个元素使用step关键字默认情况下step=1

val iterator1 = arrayBuffer_las.sliding(2,2)
while (iterator1.hasNext){
  println(iterator1.next())
}

8.多数据集的相关操作:交并补差

8.1交集

API intersect

运算不改变原始集合

英文单词intersect 就是交叉的意思

8.2并集

API union

8.3差集

API diff
两个集合中不同的元素就是差集different

9.拉链

将两个数据集拉在一起

//基本原则:将两个数据集中相同的位置的数据拉在一起
//    (1, 0, 2, 4)
//    (2, 0, 4, 8)
//    1,2拉一起    0,0拉一起  2,4拉一起  4,8拉一起
//    API   zip     //返回值是一个元组,甚至可以直接转map

拉链解决了通用集合如何向Map转化的难题;

但是此处拉链转化Map是immutable类型需要一步转化

相关推荐
空青72610 分钟前
ChatGPT在Java后端开发中的应用与影响
java·开发语言·人工智能·后端·神经网络·机器学习·chatgpt
冯宝宝^21 分钟前
图书管理系统
服务器·数据库·vue.js·spring boot·后端
搁浅小泽24 分钟前
C 语言总复习
c语言·开发语言
五月阳光暖洋洋33 分钟前
SpringBoot2.2.6使用spring-boot-validation读取不到自定义配置文件中的属性
java·开发语言·spring boot
java66666888837 分钟前
深入理解Spring Boot中的容器与依赖注入
java·spring boot·后端
u0104058361 小时前
Spring Boot中的依赖注入和控制反转
java·spring boot·后端
小悟空GK1 小时前
Http介绍
开发语言
虫小宝1 小时前
解决Spring Boot中的安全漏洞与防护策略
java·spring boot·后端
502胶水2051 小时前
腾讯地图异步调用
开发语言·ios·swift
test6381 小时前
使用ThreadLocal存储用户登录信息
java·后端·面试