Scala笔记--集合与流式处理

Posted 幼儿园园草

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Scala笔记--集合与流式处理相关的知识,希望对你有一定的参考价值。

Scala推崇不可变集合,尽管也可以使用可变版本。如果想要修改集合,而且集合上所有的操作都在单线程中进行,那么就可以选择可变集合。但是,如果打算跨线程、跨Actor地使用集合,那么不可变集合将会是更好的选择。不可变集合是线程安全的,不受副作用影响,并且有助于程序的正确性。 可以通过选择下列两个包之一来选择所使用的版本:scala.collection.mutable或者scala.collection.immutable。如果不指定所使用的包名,那么,在默认情况下,Scala会使用不可变集合

1 常用集合类型

1.1 数组

1.1.1 不可变数组Array

主要操作包括创建数组、访问数组元素、修改数组元素、数组遍历、添加元素

package com.lrm.demo07

/**
 * @author RuiMing Lin 
 * @date 2021-06-04 1:21
 * @description 不可变数组
 */
object demo1 {
  def main(args: Array[String]): Unit = {
    // 1.创建数组方式一
    val arr1: Array[Int] = new Array[Int](5)
    // 创建数组方式二,使用伴生对象的Apply方法
    val arr2: Array[Int] = Array(1, 2, 3, 4, 5)

    // 2. 访问数组元素、修改数组元素
    println(arr1(0))
    println(arr1(4))
    println("========================")
    arr2(0) = 10
    arr2(4) = 12
    println(arr2(0))
    println(arr2(4))
    println("========================")

    // 3.数组遍历
    // 3.1 普通for循环
    for (i <- 0 until arr2.length) {
      print(arr2(i) + "\\t")
    }
    println()
    // 3.2 根据索引方法
    for (i <- arr2.indices)
      print(arr2(i) + "\\t")
    println()

    // 3.3 增强for循环
    for (item <- arr2)
      print(item + "\\t")
    println()

    // 3.4 使用foreach方法
    arr2.foreach((item: Int) => print(item + "\\t"))
    println()
    arr2.foreach(println)
    println("========================")

    // 4. 添加元素
    val newArr = arr2.:+(73)
    println(arr2.mkString("-"))
    println(newArr.mkString("-"))

    val newArr2 = newArr.+:(30)
    println(newArr2.mkString("-"))

    val newArr3 = newArr2 :+ 15
    val newArr4 = 19 +: 29 +: newArr3 :+ 26 :+ 73
    println(newArr4.mkString("-"))
  }
}

1.1.2 可变数组ArrayBuffer

可变数组与不可变数组在操作上基本是一致的。主要区别在于增加元素和删除元素上。

package com.lrm.demo07


import scala.collection.mutable
import scala.collection.mutable.ArrayBuffer

/**
 * @author RuiMing Lin 
 * @date 2021-06-04 13:20
 * @description 可变数组
 */
object demo2 {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变数组
    val arr1: ArrayBuffer[Int] = new ArrayBuffer[Int]()
    val arr2 = ArrayBuffer(11, 22, 33)
    println(arr1)
    println(arr2)
    println("======================")

    // 2. 访问元素
    println(arr2(1))
    arr2(1) = 28
    println(arr2(1))
    println("======================")

    // 3. 添加元素
    val newArr1 = arr1 += 19
    println(arr1)
    println(newArr1)
    println(arr1 == newArr1)
    newArr1 += 13
    println(arr1)
    println("======================")

    77 +=: arr1
    println(arr1)
    println(newArr1)
    println("======================")

    arr1.append(36)
    arr1.prepend(11, 76)
    arr1.insert(1, 13, 59)  // 在索引1上插入12,59
    println(arr1)
    println("======================")

    arr1.insertAll(2, newArr1)
    arr1.prependAll(newArr1)
    println(arr1)
    println("======================")

    // 4. 删除元素
    arr1.remove(3)
    println(arr1)
    arr1.remove(0, 10)
    println(arr1)
    println("======================")

    arr1 -= 13
    println(arr1)
    println("======================")

    // 5. 可变数组转换为不可变数组
    val arr: ArrayBuffer[Int] = ArrayBuffer(23, 56, 98)
    val newArr: Array[Int] = arr.toArray
    println(newArr.mkString(", "))
    println(arr)

    // 6. 不可变数组转换为可变数组
    val buffer: mutable.Buffer[Int] = newArr.toBuffer
    println(buffer)
    println(newArr)
  }
}

1.1.3 多维数组

package com.lrm.demo07

/**
 * @author RuiMing Lin 
 * @date 2021-06-04 14:28
 * @description 多维数组
 */
object demo3 {
  def main(args: Array[String]): Unit = {
    // 1. 创建二维数组,2行3列
    val array: Array[Array[Int]] = Array.ofDim[Int](2, 3)

    // 2. 访问元素
    array(0)(2) = 19
    array(1)(0) = 25

    println(array.mkString(", "))
    for (i <- 0 until array.length; j <- 0 until array(i).length){
      println(array(i)(j))
    }
    for (i <- array.indices; j <- array(i).indices){
      print(array(i)(j) + "\\t")
      if (j == array(i).length - 1) println()
    }
    array.foreach(line => line.foreach(println))
    array.foreach(_.foreach(println))
  }
}

1.2 列表

1.2.1 不可变列表List

package com.lrm.demo07

/**
 * @author RuiMing Lin 
 * @date 2021-06-04 14:29
 * @description 不可变List
 */
object demo4 {
  def main(args: Array[String]): Unit = {
    // 1. 创建一个List,List是一个抽象类
    val list1 = List(23, 65, 87)
    println(list1)
    println("==================")

    // 2. 访问和遍历元素
    println(list1(1))
    list1.foreach(println)
    println("==================")

    // 3. 添加元素
    val list2 = 10 +: list1
    val list3 = list1 :+ 23
    val list4 = list2.::(51)
    val list5 = Nil.::(13)
    val list6 = 73 :: 32 :: Nil
    val list7 = 17 :: 28 :: 59 :: 16 :: Nil
    println(list1)
    println(list2)
    println(list3)
    println(list4)
    println(list5)
    println(list6)
    println(list7)
    println("==================")

    // 4. 合并列表
    val list8 = list6 :: list7    // 合并整个list
    println(list8)
    val list9 = list6 ::: list7   // 合并所有元素
    println(list9)
    val list10 = list6 ++ list7     // 合并所有元素
    println(list10)
  }
}

1.2.2 可变列表ListBuffer

package com.lrm.demo07

import scala.collection.mutable.ListBuffer

/**
 * @author RuiMing Lin 
 * @date 2021-06-04 16:45
 * @description 可变List
 */
object demo5 {
  def main(args: Array[String]): Unit = {
    // 1. 创建可变列表
    val list1: ListBuffer[Int] = new ListBuffer[Int]()
    val list2 = ListBuffer(12, 53, 75)
    println(list1)
    println(list2)
    println("==============")

    // 2. 添加元素
    list1.append(15, 62)
    list2.prepend(20)
    list1.insert(1, 19, 22)
    println(list1)
    println(list2)

    31 +=: 96 +=: list1 += 25 += 11
    println(list1)
    println("==============")


    // 3. 合并list
    val list3 = list1 ++ list2
    println(list1)
    println(list2)
    println(list3)
    println("==============")

    list1 ++=: list2
    println(list1)
    println(list2)
    println(list3)

    println("==============")

    // 4. 修改元素
    list2(3) = 30
    list2.update(0, 89)
    println(list2)
    println("==============")

    // 5. 删除元素
    list2.remove(2)
    list2 -= 25
    println(list2)
    println("==============")
  }
}

1.3 Set

1.3.1 不可变Set

package com.lrm.demo07

/**
 * @author RuiMing Lin 
 * @date 2021-06-04 17:04
 * @description 不可变Set
 */
object demo6 {
  def main(args: Array[String]): Unit = {
    // 1. 创建set
    val set1 = Set(13, 23, 53, 12, 13, 23, 78)
    println(set1)
    println("==================")

    // 2. 添加元素
    val set2 = set1 + 129
    println(set1)
    println(set2)
    println("==================")

    // 3. 合并set
    val set3 = Set(19, 13, 23, 53, 67, 99)
    val set4 = set2 ++ set3
    println(set2)
    println(set3)
    println(set4)
    println("==================")

    // 4. 删除元素
    val set5 = set3 - 13
    println(set3)
    println(set5)
    println("==================")
  }
}

1.3.2 可变Set

package com.lrm.demo07

import scala.collection.mutable
import scala.collection.mutable.Set

/**
 * @author RuiMing Lin 
 * @date 2021-06-04 17:10
 * @description 可变Set
 */
object demo7 {
  def main(args: Array[String]): Unit = {
    // 1. 创建set
    val set1: Set[Int] = Set(13, 23, 53, 12, 13, 23, 78)
    println(set1)
    println("==================")

    // 2. 添加元素
    val set2 = set1 + 11
    println(set1)
    println(set2)
    println(set1 == set2)
    set1 += 11
    println(set1)
    println(set1 == set2)
    println("==================")

    val flag1 = set1.add(10)
    println(flag1)
    println(set1)
    val flag2 = set1.add(10)
    println(flag2)
    println(set1)
    println("==================")

    // 3. 删除元素
    set1 -= 11
    println(set1)
    val flag3 = set1.remove(10)
    println(flag3)
    println(set1)
    val flag4 = set1.remove(10)
    println(flag4)
    println(set1)
    println("==================")

    // 4. 合并两个Set
    val set3 = Set(99,88)
    println(set1)
    println(set3)
    println("==================")
    val set4: Set[Int] = set1 ++ set3
    println(set1)
    println(set3)
    println(set4)
    println("==================")
    set1 ++= set3
    println(set1)
    println(set3)
    println("==================")
  }
}

1.4 map

1.4.1 不可变map

package com.lrm.demo07

/**
 * @author RuiMing Lin 
 * @date 2021-06-04 17:29
 * @description
 */
object demo8 {
  def main(args: Array[String]): Unit = {
    // 1. 创建map
    val map1: Map[String, Int] = Map("a" -> 13, "b" -> 25, "hello" -> 3)
    println(map1)
    println(map1.getClass)
    println("==========================")

    // 2. 遍历元素
    map1.foreach(print)
    println()
    map1.foreach((kv: (String, Int)) =<

以上是关于Scala笔记--集合与流式处理的主要内容,如果未能解决你的问题,请参考以下文章

《Java8实战》读书笔记13:Java8 与 Scala

Scala笔记整理:Scala集合库

Java8 中的流式数据处理

Java8 中的流式数据处理

jdk1.8新特性Stream流式处理

Scala 学习笔记之集合