1.List集合的使用及创建

object ListDemo1 {def main(args: Array[String]): Unit = {//创建一个Listval list: List[Int] = List(1,2,3,4,5)//list的组成:head、tail//list=head(element)+tail(element)、除了头部以外的元素都是尾println(s"head:${list.head}")println(s"tail:${list.tail}")//todo:如果list中只有一个元素,有头,tail是空的集合listval list1 = List(1)println(s"head:${list1.head}")println(s"tail:${list1.tail}")/*** list创建的第二种方式* ::,从右往左运算*/val list2 = 1::Nil //Nil.::(1)println("list创建的第二种方式")//将list转换成字符串println(list2.mkString(","))//头插法val list3 = 1::2::3::4::5::6::Nilprintln("list3:"+list3.mkString(","))//list3:1,2,3,4,5// -----------可变的集合-----------var listBuffer =ListBuffer[Int]()//添加元素listBuffer +=1listBuffer ++= List(111,222)println("listBuffer:"+listBuffer.mkString(","))//将可变list转化成不可变listval list5 = listBuffer.toList//判定 列表是否为空println(list5.isEmpty)//判定 列表是否存在某个元素println(list5.contains(222))}
}

2.List中map与reduce的使用与介绍

object ListFunDemo2 {def main(args: Array[String]): Unit = {//创建list集合val list: List[Int] =(1 to 10).toList/*** final def map[B]( f: (A) ⇒ B): List[B]* map() :f:(A)=>B* 将集合中的每个元素取出 传递给 函数f 进行调用,返回结果* 将每个元素 交给 一个 函数处理,返回结果*/val maplist = list.map((item)=>{item*2})//上述简写val maplist1 = list.map(_ * 2)println(maplist1.mkString(","))//list.map(_*2).foreach(println)/*** 案例:分割单词*/val lineList = List("hadoop hive spark scala","spark hive habase","hive spark java")
val lineListResult: List[Array[String]] =lineList.map(line=>line.split(" "))
println("---------lineListResult---------")lineListResult.foreach(line=>{println("--------")line.foreach(println)})/*** 压平、* final def* flatMap[B](f: (A) ⇒ GenTraversableOnce[B]): List[B]*/
val lineListResult2: List[String] = lineList.flatMap(line=>line.split(" "))lineListResult2.foreach(print)println()/*** def filter(p: (A) ⇒ Boolean): TraversableOnce[A]* filter():p:(A)=>Boolean* 针对集合中的每一个元素,调用p函数,如果返回true保留* 返回false,过滤掉该元素*/println("------filterList--------")val filterList: List[Int] = list.filter((item)=>{if(item%2==0) true else false})val filterList1: List[Int] =list.filter((item)=>{item%2==0})val filterList2=list.filter(_%2==0)println(filterList2.mkString(","))/*** def groupBy[K](f: (A) ⇒ K): Map[K, List[A]* groupBy() : f: (A) ⇒ K* K表示:分组的类别,比如数字分组,奇数和偶数,奇数:1 偶数:0*key       value* 1          list(1,3,5)* 2           list(2,4,6)*/val listgroup=List(1,1,3,4,6,3)val groupMap = listgroup.groupBy(item=>item)groupMap.foreach(println)/*** 排序函数* sorted* 默认情况下,依据集合list中的元素,自然排序规则进行 升序排序* sortBy:指定元素排序规则* sortWith :主要针对集合中元素,如果复杂的数据类型,指定排序规则**/
val list2 = List(12,99,33,89,10,45,67)//sorted,默认安装 元素的自然 升序排序val sortedList = list2.sortedprintln(sortedList.mkString(","))//def sortBy[B](f: A => B)println(list2.sortBy(item => -item).mkString(","))//上面的简写println(list2.sortBy(-_).mkString(","))//def sortWith(lt: (A, A) => Boolean):println(list2.sortWith((x1,x2)=> x1>x2).mkString(","))//降序println(list2.sortWith((x1,x2)=> x1<x2).mkString(","))//升序
//简写println(list2.sortWith(_>_).mkString(","))//降序println(list2.sortWith(_<_).mkString(","))//升序/***def reduce( op: (A1, A1) => A1 ): A1 = reduceLeft(op)* op:(A1, A1)=>A1* reduce函数中* op函数要求* 第一点、参数和返回值类型要一致* 第二点、2个参数* reduce* Hadoop MapReduce 框架中,reduce代表的是聚合* 解释参数含义* 第一个参数X1:* 可以理解为 聚合时的 临时变量 ,初始值为 head* 第二个参数X2  tail集合中的每一个元素,对于list来讲,是从第二个元素开始*///List(12,99,33,89,10,45,67)val reduceResult: Int = list2.reduce((x1, x2)=>{println(s"x1:$x1    x2:$x2")x1+x2})
println(reduceResult)
val reduceResult1 = list2.reduceRight((x1,x2)=>{println(s"x1:$x1   x2:$x2")x1+x2
})
println(reduceResult1)}}

3.Tuple(元组)的创建与使用

object Tuple0Demo3 {def main(args: Array[String]): Unit = {//数组中存储不同类型的值val arr: Array[Any] =Array(10,20.00,"spark")val first: Any =arr(0)//数据类型转换:父类可以转换为子类强制转换val intValue: Int = first.asInstanceOf[Int]println(intValue)//元组val tuple3: (Int, Double, String) = (10,20.00,"spark") //有三个元素,称为三元组println(s"first:${tuple3._1},second:${tuple3._2},third:${tuple3._3}")//二元组->(key,value) 对val tuple2: (Int, Double) =(3,1.5)println(s"key:${tuple2._1},value:${tuple2._2}")//元组可以嵌套val xx: (Int, (String, Int)) = (15,("xx",18))println(xx)//swap:交互key和value的值val t2 = tuple2.swapprintln(t2)//创建二元组的第二种方式val tup: (String, String) ="name"->"zhangsan" //隐式转换println(s"key=${tup._1} value =${tup._2}")}}

4.scala中map的基本使用

/*** scala中map的基本使用* map集合中的数据类型其实就是  二元组 (key value)对*/
object MapDemo4 {def main(args: Array[String]): Unit = {//创建不可变的mapval map: Map[String, Int] = Map("huadian"-> 10,"spark"-> 2)println(map.mkString(","))
//创建map的第二种方式val map2: Map[String, Int] = Map(("huadian",1),("spark",1),("hive",1))//将Map集合转成列表Listval list: List[(String, Int)] = map2.toListprintln(list.mkString("|||"))//如何获取map集合中元素//方式一:map(key)println(s"huadian->${map2("huadian")}")//方式二:map.get(key)println(s"huadian->${map2.get("huadian").get}")//方式三:def getOrElse[B1 >: B](key: A, default: => B1): B1println(s"huadian111->${map2.getOrElse("huadian111",10)}")/*** 遍历map中的数据*/for((key,value)<-map2){println(s"key:$key  value:$value")}println("map2.foreach")map2.foreach(item=>{println(s"key:${item._1} value:${item._2}")})map2.foreach(item=>println(s"key:${item._1} value:${item._2}"))for((key,_)<- map2) println("keyS:"+key)for((_,value)<- map2) println("values:"+value)/*** 可变map*/
import scala.collection.mutableval map3 = mutable.Map[String,Int]()map3 +="A"->1val t2 =("B"->2)map3 +=t2map3 ++= Map("C"->3,"D"->4)println("------------map3----------")
map3.foreach(item=>println(s"key:${item._1}  value:${item._2}"))//转成不可变Mapval map4 = map3.toMapmap4.foreach(println)//def exists(p: A => Boolean): Boolean//集合中是否有元素 满足 函数 p的要求//判定集合中是否存在  值是偶数val result =map4.exists(tuple=>tuple._2%2==0)println(result)}
}

5.set集合的使用

object SetDemo5 {def main(args: Array[String]): Unit = {/*** 对于set和Map来讲,可变和不可变的,类名名称相同,只是在不同的包下面* 使用场景:去重,使用set存储数据*///不可变的集合,无序不重复val set=Set(1,2,3,4,5,1,2,3,4,5,-10)println(set.mkString(","))//max和min获取集合中最大最小值,里面存储的元素需要,具有可比性(比较器)println(s"max=${set.max}")println(s"min=${set.min}")//def maxBy[B](f: A => B)(implicit cmp: Ordering[B]): A//maxBy类似sortBy,指定排序规则val xx = set.maxBy(x=>Math.abs(x))println(xx)//对于不可变的集合来说,也可以像其中,添加、删除元素,但是得到的是一个新的集合val newSet = set+10println(set.mkString(","))println(newSet.mkString(","))/*** 可变set* 我们需要手动导包*/import scala.collection.mutablevar set2 = mutable.Set[Int]()//添加元素set2 +=1set2 ++=Set(2,3,4)set2 ++=List(5,6,7)println("----set2----")//将可变set转换成不可变set2.toSet[Int].foreach(print)//将set转换成Listprintln(set2.toList.mkString(","))}}

6.scala中将JAVA集合实例对象转换成Scala类中的实例对象,convert的使用

/*** scala中如何将JAVA集合实例对象转换成Scala类中的实例对象* JavaConverters*/
object ConvertToScalaDemo6 {def main(args: Array[String]): Unit = {//定义JAVA中的map实例对象val hashMap: util.HashMap[String, Int] = new util.HashMap[String,Int]()hashMap.put("spark",2)hashMap.put("hive",5)hashMap.put("hadoop",6)import scala.collection.JavaConverters._val map: mutable.Map[String, Int] = hashMap.asScalamap.foreach(tuple=>println(s"key:${tuple._1} value:${tuple._2}"))}
}

以上是作为初学Scala的小白的我写的一些demo,希望可以帮助像我一样是初学的人。

【Scala】Scala中常见集合的使用---代码详解相关推荐

  1. 传奇服务端常见gameofblue脚本命令代码详解

    传奇服务端常见gameofblue脚本命令代码详解 gameofblue脚本命令详解 [@段] ;段用英文或数字表示 goto @段 ;跳转到指定段,开始执行相当于B中的goto语句 #say 语句 ...

  2. yii mysql 事务处理_Yii2中事务的使用实例代码详解

    前言 一般我们做业务逻辑,都不会仅仅关联一个数据表,所以,会面临事务问题. 数据库事务(Database Transaction) ,是指作为单个逻辑工作单元执行的一系列操作,要么完全地执行,要么完全 ...

  3. vue build text html,Vue中v-text / v-HTML使用实例代码详解_放手_前端开发者

    废话少说,代码如下所述: /p> 显示123 /p> 补充:vuejs {{}},v-text 和 v-html的区别 {{message}} let app = new Vue({ el ...

  4. python的常量和变量_python中的常量和变量代码详解

    局部和全局变量: # name='lhf' # def change_name(): # # global name # name='帅了一比' # print('change_name',name) ...

  5. 线程池参数详解_java中常见的六种线程池详解

    之前我们介绍了线程池的四种拒绝策略,了解了线程池参数的含义,那么今天我们来聊聊Java 中常见的几种线程池,以及在jdk7 加入的 ForkJoin 新型线程池 首先我们列出Java 中的六种线程池如 ...

  6. java构造单例线程池_java中常见的六种线程池详解

    之前我们介绍了线程池的四种拒绝策略,了解了线程池参数的含义,那么今天我们来聊聊Java 中常见的几种线程池,以及在jdk7 加入的 ForkJoin 新型线程池 首先我们列出Java 中的六种线程池如 ...

  7. python输出变量代码_Python中变量的输入输出实例代码详解

    1.变量的输入: input函数: input() input("请输入银行卡密码") password = input("请输入银行卡密码") 变量名 = i ...

  8. js去掉前后空格的函数_MySQL 中常见的字符串函数应用详解

    在前面若干章节中,我们介绍了SQL的基础与高阶语法,接下来,我们将分四个章节,介绍MySQL中常见的函数应用,大致分为如下几个章节: MySQL 字符串函数 MySQL 数字函数 MySQL 日期函数 ...

  9. HTTP中常见的各种状态码详解及解决方案

    总结了一些常见的http的状态码,以及常见的解决方案. 一.各范围内状态码大致含义 1xx:临时响应(Informational),需要请求者继续执行操作的状态代码,表示服务器正在接受请求. 2xx: ...

最新文章

  1. 分类素材(part3)--python机器学习基础教程(下)
  2. 计算机基础:多媒体基础知识笔记
  3. python数据批量写入iq数据库_通过Load table命令将数据文件加载到Sybase IQ数据库里面的Python脚本...
  4. 荒野行动服务器维护啥时好,荒野行动服务器真的极差
  5. springboot 启动器和监听器的加载
  6. [LeetCode][JavaScript]Power of Three
  7. Gym 100818I Olympic Parade(位运算)
  8. mysql源码启动_mysql源码分析-启动过程
  9. 穿透还原卡和还原软件的代码
  10. pyqt+pyqtgraph+lka(界面制作)--优化版
  11. Flink的检查点(checkpoint)
  12. 【promise】什么是promise?
  13. 【ol-cesium】OpenLayers与Cesium的二三维联动
  14. HTTP传递文件和接收文件处理之MultipartFile
  15. LCL型并网逆变器的功率控制研究
  16. yolact-训练自己的数据集
  17. Spring、Mybatis、Spring MVC整合实例
  18. 人工智能时代,你的数学基础够用吗?
  19. python hadoop streaming_如何在Hadoop中使用Streaming编写MapReduce(转帖)
  20. wins10系统更换固态硬盘经常假死如何解决

热门文章

  1. Numpy Statistics 统计函数
  2. mysql事务与锁_mysql之事务和锁
  3. 在 vCenter Server 中触发了 vSphere Distributed Switch 绑定警报 (2057667)
  4. 【SAP解决方案干货合集】满满的干货,是您了解华为云SAP解决方案的必备利器
  5. Kubernetes学习总结(10)—— 何为云原生,与 kubernetes 是什么关系
  6. Redis学习总结(6)——Redis 高级特性与案例学习
  7. 人眼分辨 PPI_扒一扒,PPI、LPI、DPI分辨率三兄弟~
  8. java二维数组模拟用户登录_Java 语言基础编程题 (二维数组, 五子棋游戏, 实体类和接口)...
  9. linux shell 退出_dialog命令在linux系统中使用方法
  10. android下拉菜单刷新,android下拉刷新列表实现(pull to refresh)