Scala学习(集合02)

元组

package learn04
object demo15 {
  def main(args: Array[String]): Unit = {
    //创建元组,使用小括号
    val tuple=(1,"xwk",30)
    //根据顺序号访问元组的数据
    println(tuple._1)
    println(tuple._2)
    println(tuple._3)
    //迭代器
    val iterator:Iterator[Any]=tuple.productIterator
    //根据索引访问元素
    println(tuple.productElement(0))
    //如果元组的元素只有两个,那么我们称之为对偶元组,也称之为键值对
    val kv:(String,Int)=("a",1)
    val kv1:(String,Int)="a"->1
    println(kv eq kv1)
  }
}
1
xwk
30
1
false

队列

package learn04
import scala.collection.mutable
object demo16 {
  def main(args: Array[String]): Unit = {
    val que=new mutable.Queue[String]()
    //添加元素
    que.enqueue("a","b","c")
    val que1:mutable.Queue[String]=que+="d"
    println("que:"+que.mkString(","))
    println("que1:"+que1.mkString(","))
    println(que eq que1)
    //获取元素
    println(que.dequeue())
    println(que.dequeue())
    println(que.dequeue())
  }
}
que:a,b,c,d
que1:a,b,c,d
true
a
b
c

并行

package learn04
object demo17 {
  def main(args: Array[String]): Unit = {
    /*
    Scala为了充分使用多核CPU,
    提供了并行集合(有别于前面的串行集合),
    用于多核环境的并行计算。
     */
    val result1=(0 to 100).map{x=>Thread.currentThread.getName}
    val result2=(0 to 100).par.map{x=>Thread.currentThread.getName}
    println(result1)
    println(result2)
  }
}

常用方法

常用方法

package learn04
object demo18 {
  def main(args: Array[String]): Unit = {
    val list=List(1,2,3,4)
    //集合长度
    println("size=>"+list.size)
    println("length=>"+list.length)
    //判断集合是否为空
    println("isEmpty=>"+list.isEmpty)
    //集合迭代器
    println("iterator=>"+list.iterator)
    //循环遍历集合
    list.foreach(print)
    //将集合转换为字符串
    println("mkString=>"+list.mkString(","))
    //判断集合中是否包含某个元素
    println("contains=>"+list.contains(2))
    //取集合的前几个元素
    println("take=>"+list.take(2))
    //取集合的后几个元素
    println("takeRight=>"+list.takeRight(2))
    //查找元素
    println("find=>"+list.find(x=>x%2==0))
    //丢弃前几个元素
    println("drop=>"+list.drop(2))
    //丢弃后几个元素
    println("dropRight=>"+list.dropRight(2))
    //反转集合
    println("reverse=>"+list.reverse)
    //去重
    println("distinct=>"+list.distinct)
  }
}
size=>4
length=>4
isEmpty=>false
iterator=><iterator>
1234mkString=>1,2,3,4
contains=>true
take=>List(1, 2)
takeRight=>List(3, 4)
find=>Some(2)
drop=>List(3, 4)
dropRight=>List(1, 2)
reverse=>List(4, 3, 2, 1)
distinct=>List(1, 2, 3, 4)

衍生集合

package learn04
object demo19 {
  def main(args: Array[String]): Unit = {
    val list=List(1,2,3,4)
    val list1=List(1,2,3,4)
    val list2=List(3,4,5,6)
    //集合头
    println("head=>"+list.head)
    //集合尾
    println("tail=>"+list.tail)
    //集合尾迭代
    println("tails=>"+list.tails)
    //集合初始值
    println("init=>"+list.init)
    //集合初始值迭代
    println("inits=>"+list.inits)
    //集合最后元素
    println("last=>"+list.last)
    //集合并集
    println("union=>"+list.union(list1))
    //集合交集
    println("intersect=>"+list.intersect(list1))
    //集合差集
    println("diff=>"+list.diff(list1))
    //切分集合
    println("splitAt=>"+list.splitAt(2))
    //滑动(窗口)
    println("sliding=>"+list.sliding(2))
    //滚动(没有重复)
    println("sliding=>"+list.sliding(2,2))
    //拉链
    println("zip=>"+list.zip(list1))
    //数据索引拉链
    println("zipWithIndex=>"+list.zipWithIndex)
  }
}
head=>1
tail=>List(2, 3, 4)
tails=><iterator>
init=>List(1, 2, 3)
inits=><iterator>
last=>4
union=>List(1, 2, 3, 4, 1, 2, 3, 4)
intersect=>List(1, 2, 3, 4)
diff=>List()
splitAt=>(List(1, 2),List(3, 4))
sliding=><iterator>
sliding=><iterator>
zip=>List((1,1), (2,2), (3,3), (4,4))
zipWithIndex=>List((1,0), (2,1), (3,2), (4,3))

计算函数

package learn04
object demo20 {
  def main(args: Array[String]): Unit = {
    val list=List(1,2,3,4)
    val list1=List(3,4,5,6)
    //集合最小值
    println("min=>"+list.min)
    //集合最大值
    println("max=>"+list.max)
    //集合求和
    println("sum=>"+list.sum)
    //集合乘积
    println("product=>"+list.product)
    //集合简化规约
    println("reduce=>"+list.reduce((x:Int,y:Int)=>{x+y}))
    println("reduce=>"+list.reduce((x,y)=>{x+y}))
    println("reduce=>"+list.reduce((x,y)=>x+y))
    println("reduce=>"+list.reduce(_+_))
    //集合简化规约(左)
    println("reduceLeft=>"+list.reduceLeft(_+_))
    //集合简化规约(右)
    println("reduceRight=>"+list.reduceRight(_+_))
    //集合折叠
    println("fold=>"+list.fold(0)(_+_))
    //集合折叠(左)
    println("foldLeft=>"+list.foldLeft(0)(_+_))
    //集合折叠(右)
    println("foldRight=>"+list.foldRight(0)(_+_))
    //集合扫描
    println("scan=>"+list.scan(0)(_+_))
    //集合扫描(左)
    println("scanLeft=>"+list.scanLeft(0)(_+_))
    //集合扫描(右)
    println("scanRight=>"+list.scanRight(0)(_+_))
  }
}
min=>1
max=>4
sum=>10
product=>24
reduce=>10
reduce=>10
reduce=>10
reduce=>10
reduceLeft=>10
reduceRight=>10
fold=>10
foldLeft=>10
foldRight=>10
scan=>List(0, 1, 3, 6, 10)
scanLeft=>List(0, 1, 3, 6, 10)
scanRight=>List(10, 9, 7, 4, 0)

功能函数

package learn04
object demo21 {
  def main(args: Array[String]): Unit = {
    val list=List(1,2,3,4)
    //集合映射
    println("map=>"+list.map(x=>{x*2}))
    println("map=>"+list.map(x=>x*2))
    println("map=>"+list.map(_*2))
    //集合扁平化
    val list1=List(
      List(1,2),
      List(3,4)
    )
    println("flatten=>"+list1.flatten)
    //集合扁平映射
    println("flatMap=>"+list1.flatMap(list=>list))
    //集合过滤数据
    println("filter=>"+list.filter(_%2==0))
    //集合分组数据
    println("groupBy=>"+list.groupBy(_%2))
    //集合排序
    println("sortBy=>"+list.sortBy(num=>num)(Ordering.Int.reverse))
    println("sortWith=>"+list.sortWith((left,right)=>{left<right}))
  }
}
map=>List(2, 4, 6, 8)
map=>List(2, 4, 6, 8)
map=>List(2, 4, 6, 8)
flatten=>List(1, 2, 3, 4)
flatMap=>List(1, 2, 3, 4)
filter=>List(2, 4)
groupBy=>Map(1 -> List(1, 3), 0 -> List(2, 4))
sortBy=>List(4, 3, 2, 1)
sortWith=>List(1, 2, 3, 4)

案例实现 - WordCount TopN

words.txt
Hello Scala
Hello Spark
Hello Hadoop
package learn04
import scala.io.Source
object demo22 {
  def main(args: Array[String]): Unit = {
    val list:List[String]=Source.fromFile("./src/learn04/words.txt").getLines().toList
    val wordList:List[String]=list.flatMap(_.split(" "))
    val word2OneList:List[(String,Int)]=wordList.map((_,1))
    val word2ListMap:Map[String,List[(String,Int)]]=word2OneList.groupBy(_._1)
    val word2CountMap: Map[String, Int] = word2ListMap.map(
      kv => {
        (kv._1, kv._2.size)
      }
    )
    println(word2CountMap)
  }
}
Map(Hadoop -> 1, Hello -> 3, Spark -> 1, Scala -> 1)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: Scala是一种多范式编程语言,既可以用于面向对象编程,也可以用于函数式编程,支持静态类型检查和类型推断。它受到Java和Ruby的启发,同时也受到函数式编程语言的影响,如Haskell和Erlang。 ### 回答2: Scala主要是学习以下几种语言: 1. Java:Scala是一种在Java虚拟机上运行的编程语言,并且与Java语言高度兼容。因此,学习Scala需要具备一定的Java基础,包括Java的面向对象编程思想、语法和常用的类库。 2. Functional Programming(函数式编程):Scala是一种支持函数式编程的语言,它引入了许多函数式编程的概念和特性,如高阶函数、不可变性和模式匹配等。因此,学习Scala需要学习一些函数式编程的基本理念和技术。 3. Static Typing(静态类型):与Java类似,Scala是一种静态类型语言,需要声明变量的类型,并且在编译时进行类型检查。因此,学习Scala需要对静态类型语言的基本概念和类型系统有一定的了解。 4. Object-Oriented Programming(面向对象编程):Scala是一种面向对象的语言,支持类、继承、多态等面向对象编程的特性。因此,学习Scala需要熟悉面向对象编程的基本思想和常用的设计模式。 总之,学习Scala需要掌握Java的基础知识、函数式编程的概念和技术,以及静态类型和面向对象编程的思想。这些知识将帮助开发者更好地理解和应用Scala编程语言。 ### 回答3: Scala主要是学习Java和函数式编程的语言。 首先,Scala是一种同时支持面向对象编程和函数式编程的语言。在面向对象方面,它借鉴了Java的语法和面向对象思想,因此熟悉Java的人可以很快上手ScalaScala提供了类、继承、多态和接口等特性,使得开发者可以使用面向对象的方式来组织代码和实现复杂的程序。 其次,Scala也是一种函数式编程语言,它引入了很多函数式编程的概念和特性。函数是Scala的一等公民,可以作为参数或返回值进行传递。Scala提供了很多高阶函数的概念,比如map、filter和reduce等,这些函数可以很方便地操作集合数据。此外,Scala还支持不可变的数据结构和模式匹配等函数式编程的特性。 由于Scala和Java的紧密联系,学习Scala的过程,对Java的知识会有帮助。熟悉Java的开发者可以借助Scala的优势来提高开发效率和代码可读性。同时,Scala也为Java开发者提供了平滑迁移的途径,可以逐渐引入Scala的特性和概念,使得代码更加简洁和灵活。 综上所述,学习Scala主要是学习Java和函数式编程的语言。掌握Java的开发者可以更快上手Scala,并且通过学习Scala的函数式编程特性,可以拓展自己的编程思维和方式。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

数据攻城小狮子

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值