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

一、在本文中,我们将通过一个实际的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_18case 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.iteratorwhile (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).sumprintln(s"Total average score sum: $totalAverageScore")// 8. 再次使用该迭代器,筛选出成绩列表中有至少一个特定分数以上的学生信息,并打印他们的姓名和年龄val highScoreThreshold = 80.0val highScoreStudents = students.filter(_.averageScore >= highScoreThreshold)println("Students with average score above the threshold:")highScoreStudents.foreach(student => println(s"Name: ${student.name}, Age: ${student.age}"))}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.xdnf.cn/news/19086.html

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

网络协议(4)拥塞控制

之前已经说过了tcp也是会考虑网络的情况的,也就是当网络出现问题的时候tcp不会再对报文进行重传。当所有的用户在网络不好的时候都不会对丢失的报文进行重传。这样就会防止网络瘫痪。 这样的机制也就是tcp会进行拥塞控制。 拥塞控制 所谓的慢启动看下面这张图就能…

#define定义宏(2)

大家好,今天给大家分享两个技巧。 首先我们应该先了解一下c语言中字符串具有自动连接的特点。注意只有将字符串作为宏参数的时候才可以把字符串放在字符串中。 下面我们来讲讲这两个技巧 1.使用#,把一个宏参数变成对应的字符串。 2.##的作用 可以把位…

蓝桥杯每日真题 - 第17天

题目:(最大数字) 题目描述(X届 C&C B组X题) 题目分析: 操作规则: 1号操作:将数字加1(如果该数字为9,变为0)。 2号操作:将数字减…

Leetcode打卡:最少翻转次数使二进制矩阵回文I

执行结果:通过 题目:3239 最少翻转次数使二进制矩阵回文I 给你一个 m x n 的二进制矩阵 grid 。 如果矩阵中一行或者一列从前往后与从后往前读是一样的,那么我们称这一行或者这一列是 回文 的。 你可以将 grid 中任意格子的值 翻转 &#…

@JsonSerialize修复前端精度问题

后端id定位为Long类型,前端查询出来的值莫名多了几个000 造成这个问题的原因是精度丢失, java中long数据能表示的范围比js中number大,在跟前端交互时,这样也就意味着部分数值在js中存不下(变成不准确的值)。 在字段上加 JsonSeri…

大模型(LLMs)RAG 版面分析——表格识别方法篇

大模型(LLMs)RAG 版面分析——表格识别方法篇 一、为什么需要识别表格? 表格的尺寸、类型和样式展现出多样化的特征,如背景填充的差异性、行列合并方法的多样性以及内容文本类型的不一致性等。同时,现有的文档资料不…

基于Matlab PCA人脸识别(二)

1.2 向量与基变换 1.2.1 内积与投影 两个大小相同向量的内积被定义如下:

RE正则表达式 小练习

题目: 答案:

整理:4篇专注于多模态大语言模型(MLLM)的瘦身变体论文

近年来,随着人工智能技术飞速发展,大语言模型(LLM)和多模态大语言模型(MLLM)成为了炙手可热的明星。它们不仅能处理文字,还能看图识字,简直是“全能选手”。这种能力得益于模型中加入…

车轮上的科技:Spring Boot汽车新闻集散地

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及,互联网成为人们查找信息的重要场所,二十一世纪是信息的时代,所以信息的管理显得特别重要。因此,使用计算机来管理汽车资讯网站的相关信息成为必然。开发合适…

go-zero(五) 模板定制

go-zero 模板定制 goctl 代码生成是基于 go 的模板去实现数据驱动的,实际开发中,使用goctl 生成的代码,并不符合我们的需求。 例如,我们刚刚的使用错误管理,我们需要在handler中返回的错误信息。 一、生成模板 首先…

ICML24最新开源时序基础模型MOMENT

论文标题:MOMENT: A Family of Open Time-series Foundation Models 论文链接:https://arxiv.org/pdf/2402.03885 前言 当前时间序列数据上预训练大型模型面临以下挑战:(1) 缺乏大型且统一的公共时间序列数据集,(2) 时间序列特…

Flink和Spark的区别是什么?各自的应用场景是什么?

一、Flink是什么? Flink:Flink 是一个分布式流处理框架,其架构基于流计算,将一切都看作是流。它采用了一种基于事件驱动的架构,数据以流的形式源源不断地进入系统,并且能够实时处理这些数据。例如&#xf…

2024.11.18晚Linux复习课笔记

第一章 cat -n显示行号 -b不显示空行号 pwd 打印当前的工作目录 cd ls 打印当前工作的所有文件 -a -A -l:显示当前文件的详细信息 -r:递归显示 passwd:修改密码 ip a 查看ip地址 poweroff shutdown -h 关机 reboot shutdown -r 第二章 man --help …

基于Spring Boot+Unipp的博物馆预约小程序(协同过滤算法、二维码识别)【原创】

🎈系统亮点:协同过滤算法、二维码识别; 一.系统开发工具与环境搭建 1.系统设计开发工具 后端使用Java编程语言的Spring boot框架 项目架构:B/S架构 运行环境:win10/win11、jdk17 前端: 技术:框…

Scaling Law的“终结“还是新起点?——开源实践者的深度思考

作者:宋大宝,与大宝同学因那篇《回顾总结展望「融合RL与LLM思想,探寻世界模型以迈向AGI」》结识于今年春天,虽我们当时某些思想观念有些出入,也碰撞出了很多火花与共鸣,并持续地相互启发的走到了现在。他是…

【qt】控件4

1.Qradiobutton(单选按钮) ui界面有三个按钮,应该文本框,根据不同的按钮来改变不同文本框的内容 根据不同的单选按钮改变不同的文本框。 Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this);ui->radioB…

Day02_AJAX综合案例 (黑马笔记)

Day02_AJAX综合案例 目录 Day02_AJAX综合案例 学习目标 01.案例_图书管理-介绍 目标 讲解 小结 02.Bootstrap 弹框_属性控制 目标 讲解 小结 03.Bootstrap 弹框_JS控制 目标 讲解 小结 04.案例_图书管理_渲染列表 目标 讲解 小结 05.案例_图书管理_新增图书…

六、代码生成,《编译原理》(本科教学版),第2版

文章目录 零、前言0.1 编译器前端到后端 一、代码生成1.1 代码生成的任务1.2 给数据分配计算资源1.3 给代码选择合适的机器指令1.4 栈式计算机1.4.1 栈式计算机Stack的结构1.4.2 栈计算机的指令集1.4.3 变量的内存分配伪指令1.4.4 栈式计算机的代码生成1.4.4.1 递归下降代码生成…

Android集成FCM(Firebace Cloud Messaging )

集成FCM官方文档 Firebace主页面 将 Firebase 添加到您的 Android 应用 1、进入Firebace页面,创建自己的项目 2、点击自己创建好的项目,在右侧选择Cloud Messaging 3、点击Android去创建 google-services.json 4、将下载的 google-services.json 文件…