0
点赞
收藏
分享

微信扫一扫

Scala集合操作:深入探索学生信息处理

东林梁 2024-11-19 阅读 23

一、在本文中,我们将通过一个实际的Scala编程示例,深入探讨如何使用Scala的集合操作来处理学生信息。这个示例将展示如何创建学生列表,使用迭代器进行遍历,以及如何应用各种集合操作来筛选和关联数据。

1.定义学生信息

首先,我们定义一个Student case class来表示学生信息,包括姓名、年龄、语文成绩和平均成绩。

case class Student(name: String, age: Int, chineseScore: Int, averageScore: Double)

2.创建学生列表

接下来,我们创建一个包含多个学生信息的列表。

val students = List(
  Student("鲁班", 21, 85, 88.0),
  Student("关羽", 19, 78, 75.5),
  Student("嬴政", 22, 90, 92.0),
  Student("商鞅", 20, 82, 80.0),
  Student("荆轲", 23, 88, 97.5),
  Student("韩信", 18, 70, 68.0)
)

3.迭代器基础遍历

我们使用迭代器来遍历学生列表,并打印每个学生的姓名。

val studentIterator = students.iterator
while (studentIterator.hasNext) {
  println(studentIterator.next().name)
}

4.使用duplicate方法和筛选操作

利用duplicate方法创建迭代器副本,分别根据年龄和语文成绩进行筛选。

val (olderStudentsIterator, highChineseScoreStudentsIterator) = students.iterator.duplicate
val olderStudents = olderStudentsIterator.filter(_.age > 20)
val highChineseScoreStudents = highChineseScoreStudentsIterator.filter(_.chineseScore > 80)

5.使用zip方法关联信息

我们创建一个新的列表来存储每个学生的平均成绩,然后使用zip方法将学生信息和平均成绩关联起来。

val averageScores = students.map(_.averageScore)
val zipped = students.iterator.zip(averageScores.iterator)
while (zipped.hasNext) {
  val (student, score) = zipped.next()
  println(s"${student.name} - Average Score: $score")
}

6.打印特定学生信息

我们使用takedrop方法来打印前三名和从第四名开始的后三名学生的信息。

println("Top three students:")
students.take(3).foreach(println)

println("Next three students starting from the 4th:")
students.drop(3).take(3).foreach(println)

7.统计所有学生的平均成绩总和

我们重新创建学生列表的迭代器,用于统计所有学生的平均成绩总和。

val totalAverageScore = students.map(_.averageScore).sum
println(s"Total average score sum: $totalAverageScore")

8.筛选特定分数以上的学生

最后,我们筛选出平均成绩在特定分数以上的学生,并打印他们的姓名和年龄。

val highScoreThreshold = 80.0
val highScoreStudents = students.filter(_.averageScore >= highScoreThreshold)
println("Students with average score above the threshold:")
highScoreStudents.foreach(student => println(s"Name: ${student.name}, Age: ${student.age}"))

9.结论

通过这个示例,我们展示了Scala集合操作的强大功能,包括迭代器的使用、数据筛选、信息关联和数据统计。这些操作不仅提高了代码的可读性和简洁性,还增强了数据处理的能力。希望这篇文章能够帮助你更好地理解和应用Scala的集合操作,让你的粉丝在阅读你的博客时感到兴奋和满足。记住,掌握这些技巧,将使你的Scala编程技能更上一层楼!

二、完整代码块:

package Test11_18

case class Student(name: String, age: Int, chineseScore: Int, averageScore: Double)

object RW {
  def main(args: Array[String]): Unit = {
    val students = List(
      Student("鲁班", 21, 85, 88.0),
      Student("关羽", 19, 78, 75.5),
      Student("嬴政", 22, 90, 92.0),
      Student("商鞅", 20, 82, 80.0),
      Student("荆轲", 23, 88, 97.5),
      Student("韩信", 18, 70, 68.0)
    )

    // 2. 创建迭代器并进行基础遍历
    val studentIterator = students.iterator
    while (studentIterator.hasNext) {
      println(studentIterator.next().name)
    }

    val (olderStudentsIterator, highChineseScoreStudentsIterator) = students.iterator.duplicate

    // 在原迭代器上根据年龄条件筛选年龄>20岁的同学
    val olderStudents = olderStudentsIterator.filter(_.age > 20)

    // 在副本迭代器上根据语文成绩条件筛选>80分的同学
    val highChineseScoreStudents = highChineseScoreStudentsIterator.filter(_.chineseScore > 80)

    // 4. 使用zip方法关联信息
    val averageScores = students.map(_.averageScore)
    val zipped = students.iterator.zip(averageScores.iterator)
    while (zipped.hasNext) {
      val (student, score) = zipped.next()
      println(s"${student.name} - Average Score: $score")
    }

    // 5. 打印前三名的同学信息
    println("Top three students:")
    students.take(3).foreach(println)

    // 6. 打印从第4名开始的后3位同学的信息
    println("Next three students starting from the 4th:")
    students.drop(3).take(3).foreach(println)

    // 7. 重新创建学生列表的迭代器,用于统计所有学生的所有成绩的总和,并打印结果
    val totalAverageScore = students.map(_.averageScore).sum
    println(s"Total average score sum: $totalAverageScore")

    // 8. 再次使用该迭代器,筛选出成绩列表中有至少一个特定分数以上的学生信息,并打印他们的姓名和年龄
    val highScoreThreshold = 80.0
    val highScoreStudents = students.filter(_.averageScore >= highScoreThreshold)
    println("Students with average score above the threshold:")
    highScoreStudents.foreach(student => println(s"Name: ${student.name}, Age: ${student.age}"))
  }
}
举报

相关推荐

0 条评论