【大数据开发】scala练习题——类、list、map综合和抽象类、继承、特质综合

一、类、list、map综合

package day05

/**
 * 1、 读取以上数据,将信息存入到List[Score]中
 * 2、 计算所有的成绩中的最高成绩、最低成绩、总成绩和平均成绩
 * 3、 计算所有的成绩中的及格学生的最高成绩、最低成绩、总成绩和平均成绩
 * 4、 将集合中的数据,按照成绩降序排列
 * 5、 计算不及格的学生中的最高成绩的学生姓名、科目、成绩
 * 6、 分别计算男生的数量和女生的数量
 * 7、 分别计算所有成绩中, 男生的最高成绩和对应的姓名、女生的最高成绩和对应的姓名
 * 8、 计算每一个学科的成绩Top3
 * 9、 计算每一个学生的挂科数量
 */

import scala.io.{BufferedSource, Source}

object Test1{
    def main(args: Array[String]): Unit = {
        val source:List[Score1] = {

            val sc: BufferedSource = Source.fromFile("F:\\score.txt")
            val content: String = sc.mkString
            sc.close()

            //1.将每一行的数据都进行处理,存进Score1对象中,再将该数组toList
            //代码块中的最后一行返回值给了source
            content.split("\r\n|\n").map(line => {
                val properties: Array[String] = line.split(", ")
                Score1(properties(0), properties(1), properties(2), properties(3).toInt)
            }).toList

        }


        //设计一个计算各种成绩的方法,返回一个包含各种分数的元组
        val calculateScore: List[Int] => (Int,Int,Int,Double) = {
            list => (list.max,list.min,list.sum,list.sum.toDouble/list.size)
        }

        // 2. 计算所有的成绩中的最高成绩、最低成绩、总成绩和平均成绩
        //得到一个List[Int]类型的分数数据
        val (max1, min1, sum1, avg1) = calculateScore(source.map(_.score))
        println("第2题---------")
        println(s"$max1")
        println(s"$min1")
        println(s"$sum1")
        println(s"$avg1")

        // 3. 计算所有的成绩中的及格学生的最高成绩、最低成绩、总成绩和平均成绩
        val (max2, min2, sum2, avg2) = calculateScore(source.filter(x => x.score>=60).map(_.score))
        println("第3题---------")
        println(s"$max2")
        println(s"$min2")
        println(s"$sum2")
        println(s"$avg2")

        // 4. 将集合中的数据,按照成绩降序排列
        val sorted: List[Score1] = source.sortWith(_.score > _.score)
        println("第4题---------")
        sorted.foreach(println)

        // 5. 计算不及格的学生中的最高成绩的学生姓名、科目、成绩
        val maxScore: Score1 = source.filter(_.score < 60).maxBy(_.score)
        println("第5题---------")
        println(s"${maxScore.name},${maxScore.subject},${maxScore.score}")

        // 6. 分别计算男生的数量和女生的数量
        val (male,female) = source.partition(_.gender.equals("male"))
        val maleCount: Int = male.map(_.name).toSet.size
        val femaleCount: Int = female.map(_.name).toSet.size
        println("第6题---------")
        println(maleCount)
        println(femaleCount)

        // 7. 分别计算所有成绩中, 男生的最高成绩和对应的姓名、女生的最高成绩和对应的姓名
        val Score1(name1,_,_,score1) = male.maxBy(_.score)
        val Score1(name2,_,_,score2) = female.maxBy(_.score)
        println("第7题---------")
        println(s"男生的最高: 姓名: $name1, 成绩: $score1")
        println(s"女生的最高: 姓名: $name2, 成绩: $score2")

        // 8. 计算每一个学科的成绩Top3
        val top3: Map[String, List[Score1]] = source
          .groupBy(_.subject)
          .mapValues(_.sortWith(_.score > _.score))
          .take(3)
        println("第8题---------")
        for ((subject,scores) <- top3){
            println(s"subject:$subject,top3:$scores")
        }

        // 9. 计算每一个学生的挂科数量
        val count: Map[String, Int] = source.groupBy(_.name).mapValues(_.count(_.score < 60))
        println("第9题---------")
        for ((name,c) <- count){
            println(s"name:$name,count=$c")
        }
    }
}

case class Score1(name:String,gender:String,subject:String,score:Int)

二、抽象类、继承、特质综合

package day05
/**
 * 5.已知所有的快递公司都有自己的名字, 圆通快递可以发陆运包裹, EMS快递可以发送空运包裹, 顺丰快递既可以发送陆运,也可以发送空运。
 *
 * 小明现在需要发送一个包裹, 为小明添加一个发送空运快递的方法, 为小明添加一个发送陆运快递的方法。
 */
object Test2 {
    def main(args: Array[String]): Unit = {
        val xiaoming = new Person
        val yuantong = new Yuantong
        val ems = new EMS
        val shunfeng = new Shunfeng

        xiaoming.sendPackageByAir(shunfeng)
        xiaoming.sendPackageByAir(ems)
        xiaoming.sendPakageByLand(yuantong)
        xiaoming.sendPakageByLand(shunfeng)

    }
}

abstract class Company {
    var name: String = _
}

trait TransportOnAir {
    def transportOnAir()
}

trait TransportOnLand {
    def transportOnLand()
}

class Yuantong extends Company with TransportOnLand {
    override def transportOnLand(): Unit = println("圆通快递发陆运")
}

class EMS extends Company with TransportOnAir {
    override def transportOnAir(): Unit = println("EMS发空运")
}

class Shunfeng extends Company with TransportOnAir with TransportOnLand {
    override def transportOnAir(): Unit = println("顺丰快递发空运")

    override def transportOnLand(): Unit = println("顺丰快递发陆运")
}

class Person {
    def sendPakageByLand(express: TransportOnLand): Unit = {
        express.transportOnLand()
    }

    def sendPackageByAir(express: TransportOnAir): Unit = {
        express.transportOnAir()
    }
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值