1.WordCount
object ScalaWC {
//定义一个list
val lines =List("hello tom hello bob hello jerry","hello tom hello bob hello jj")
//压平并切分
val word =lines.flatMap(_.split(" "))
//单词作为key 1作为value
val wordAndOne=word.map((_,1))
//相同单词分一组
val grouped=wordAndOne.groupBy(_._1)
//求和
val result =grouped.map(t=>(t._1,t._2.size))
//val result =grouped.mapValues(_.foldLeft(0)(_+_._2))
//排序
val final1=result.toList.sortBy(_._2).reverse
}
2.Match
object MatchDemo1 {
def main(args: Array[String]): Unit = {
val lst=List(0)
lst match {
//Nil代表空的list
case 0::Nil =>println("只有0一个元素")
case x::y::Nil => println(s"x:$x y:$y")
case 0::tail =>println("0还有其他")
case _ => println("没有匹配上")
}
}
}
//元组的匹配
object MatchDemo2 {
def main(args: Array[String]): Unit = {
val t=(10,9,5)
t match {
case (1,x,y) => println(s"1,$x,$y")
case (_,9,5) =>println(t)
case _ => println("qita")
}
}
}
3.currying
//柯理化
object KLH {
def main(args: Array[String]): Unit = {
def klh(x:Int)(y:Int) =x*y
val res=klh(3)(_)
println(res(4))
}
}
4.Implicit
object implicitContext{
implicit val food="banna"
implicit val food1 = 10
implicit val food2 = 3.14
}
object ImplicitDemo {
def eat()(implicit food:Double):Unit={
println(s"$food delicious!!!!!!!!!!!!!!!!!!!!!!!!1")
}
def main(args: Array[String]): Unit = {
// eat()
import implicitContext._
eat()
// eat()("apple")
val arr=Array(1,2,3,4,5,6,7,8)
def mutil(x:Int) =x*x
val res=arr.map(mutil)
println(res.toBuffer)
}
}
//超人变身
//用隐式转化加强现有类型
//类型中没有方法的时候会尝试进行隐式转换
class SuperMan(val name:String){
def emitLaster=println("emitLaser!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!")
}
class Man(val name:String)
object ImplicitDemo1 {
implicit def man2superMan(man:Man):SuperMan=new SuperMan(man.name)
def main(args: Array[String]): Unit = {
val tom=new Man("Tom")
tom.emitLaster
}
}
//隐式参数的隐式转换
class SignPen{
def write(context:String)=println(context)
}
object ImplicitContext{
implicit val signPen=new SignPen
}
object ImplicitDemo2 {
def signForExam(name:String)(implicit signPen: SignPen):Unit={
signPen.write(name+" arrive in time")
}
def main(args: Array[String]): Unit = {
import ImplicitContext._
signForExam("Bob")
signForExam("jack")
}
}
//特殊售票窗口
//类型不对会尝试进行隐式转化
class SpecialPerson(val name:String)
class Student(val name:String)
class Older(val name:String)
class Teacher(val name:String)
object ImplicitDemo3 {
implicit def object2SpecialPerson(obj:Object):SpecialPerson={
if(obj.getClass==classOf[Student]){
val stu=obj.asInstanceOf[Student]
new SpecialPerson(stu.name)
}else if(obj.getClass==classOf[Older]){
val older=obj.asInstanceOf[Older]
new SpecialPerson(older.name)
}else{
Nil
}
}
var ticketNumber=0
def buySpecialTicket(p:SpecialPerson)={
ticketNumber +=1
"T+" +ticketNumber
}
def main(args: Array[String]): Unit = {
val pandi=new Student("pandi")
println(buySpecialTicket(pandi))
val chang=new Older("chang")
println(buySpecialTicket(chang))
val liping=new Student("liping")
println(buySpecialTicket(liping))
val shi=new Teacher("shi")
println(buySpecialTicket(shi))
}
}
5.Actor
import scala.actors.Actor
//给actor发送消息
class HelloActor extends Actor {
override def act(): Unit ={
while (true){
receive{
case name:String =>println("hello , "+name)
case money:Int=>println("how much ? "+money)
}
}
}
}
class HelloActor1 extends Actor {
override def act(): Unit ={
while (true){
receive{
case name:String =>println("hello xxxxx, "+name)
case money:Int=>println("how much xxxxxx? "+money)
}
}
}
}
object HelloActor {
def main(args: Array[String]): Unit = {
val helloActor1=new HelloActor1
val helloActor=new HelloActor
helloActor1.start()
helloActor.start()
helloActor1 ! "tom"
helloActor ! "tom"
}
}
import scala.actors.Actor
//给actor发送case class 消息
case class Rigister(username:String,passwd:String)
case class Login(username:String,passwd:String)
class UserMangerActor extends Actor{
override def act: Unit ={
while (true){
receive{
case Login(username,passwd)=>println("login: "+username+":"+passwd)
case Rigister(username,passwd)=>println("rigister: "+username+":"+passwd)
}
}
}
}
object HelloActor2 {
def main(args: Array[String]): Unit = {
val userActor=new UserMangerActor
userActor.start()
userActor ! Rigister("tom","123")
userActor ! Login("jerry","456")
}
}
import scala.actors.Actor
case class Message(context:String,sender:Actor)
class TomActor extends Actor{
override def act: Unit ={
while (true) {
receive{
case Message(context,sender)=>println("Tom received: "+context)
sender ! "sorry i am busy now "
}
}
}
}
class JerryActor (val tomActor: TomActor)extends Actor{
override def act: Unit ={
tomActor ! Message("hello tom ,i am jerry are you free now ?",this)
while (true){
receive{
case response:String=>println("jerry received......"+response)
}
}
}
}
object HelloActor3 {
def main(args: Array[String]): Unit = {
val tomActor=new TomActor
val jerryActor=new JerryActor(tomActor)
tomActor.start()
jerryActor.start()
}
}