feat:ChatGPT第 9 课:sortBy、sortWith、groupBy

This commit is contained in:
2026-09-16 10:02:02 +08:00
parent 4c2177d333
commit 9f60c6714f
16 changed files with 378 additions and 0 deletions
@@ -0,0 +1,17 @@
package practise9.demo
/*
* 第 9 课:sortBy、sortWith、groupBy*/
//sortBy 基础用法
object Demo1SortBy {
def main(args: Array[String]): Unit = {
val nums = List(5, 2, 8, 1, 3)
val result = nums.sortBy(x => x)
val result2 = nums.sortBy(+_)
println(result)
println(result2)
}
}
@@ -0,0 +1,15 @@
package practise9.demo
/*
* 按元组属性排序*/
object Demo2SortByProperty {
def main(args: Array[String]): Unit = {
val students = List(
("Tom", 80),
("Jack", 95),
("Alice", 70)
)
val result = students.sortBy(x => x._2)
println(result)
}
}
@@ -0,0 +1,15 @@
package practise9.demo
/*
* sortBy 配合 _ */
object Demo3SortByUnderscore {
def main(args: Array[String]): Unit = {
val students = List(
("Tom", 80),
("Jack", 95),
("Alice", 70)
)
val result = students.sortBy(_._2)
println(result)
}
}
@@ -0,0 +1,18 @@
package practise9.demo
/*
* sortBy 降序*/
object Demo4SortByDescending {
def main(args: Array[String]): Unit = {
val nums = List(5, 2, 8, 1, 3)
// 默认升序
println(nums.sortBy(x => x))
val result = nums.sortBy(x => x).reverse
println(result)
// -_ 就是 x => -x
println(nums.sortBy(-_))
}
}
@@ -0,0 +1,19 @@
package practise9.demo
/*
* sortWith 自定义比较*/
object Demo5SortWith {
def main(args: Array[String]): Unit = {
val nums = List(5, 2, 8, 1, 3)
val result = nums.sortWith((a, b) => a > b)
/*
* a 和 b 比较
* ↓
* 如果 a > b
* ↓
* a 放前面*/
println(result)
}
}
@@ -0,0 +1,30 @@
package practise9.demo
/*
* sortBy 与 sortWith 区别*/
object Demo6SortByAndSortWith {
def main(args: Array[String]): Unit = {
val students = List(
("Tom", 80),
("Jack", 95),
("Alice", 70)
)
// 按照成绩排序
// 元素
// ↓
// 提取一个排序依据
// ↓
// 按照这个依据排序
println(students.sortBy(_._2).reverse)
// 比较两个学生的成绩
// ↓
// 决定谁排前面
println(students.sortWith((a, b) => a._2 > b._2))
//sortBy → 按什么排序
//sortWith → 怎么比较
}
}
@@ -0,0 +1,13 @@
package practise9.demo
/*
* groupBy 基础用法*/
object Demo7GroupBy {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5, 6)
val result = nums.groupBy(x => x % 2)
println(result)
}
}
@@ -0,0 +1,28 @@
package practise9.demo
/*
* 按学生成绩分组*/
object Demo8GroupByStudentScore {
def main(args: Array[String]): Unit = {
val students = List(
("Tom", 85),
("Jack", 92),
("Alice", 76),
("Bob", 88),
("Lucy", 95)
)
val result = students.groupBy(student => {
val score = student._2
if (score >= 90) {
"优秀"
} else if (score >= 80) {
"良好"
} else {
"及格"
}
})
println(result)
}
}
@@ -0,0 +1,17 @@
package practise9.demo
/*
* filter + map + sortBy 串联*/
object Demo9CollectionChain {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5, 6)
val result = nums
.filter(_ % 2 == 0)
.map(_ * 10)
.sortBy(+_)
// .sortBy(x => x)
println(result)
}
}
@@ -0,0 +1,16 @@
package practise9.exercises
/*
* 练习 1:升序
给:
val nums = List(5, 2, 8, 1, 3)
使用 sortBy,得到:
List(1, 2, 3, 5, 8)*/
object Exercises1 {
def main(args: Array[String]): Unit = {
val nums = List(5, 2, 8, 1, 3)
val result = nums.sortBy(+_)
println(result)
}
}
@@ -0,0 +1,18 @@
package practise9.exercises
/*
* 练习 2:降序
还是:
val nums = List(5, 2, 8, 1, 3)
使用 sortBy,得到:
List(8, 5, 3, 2, 1)*/
object Exercises2 {
def main(args: Array[String]): Unit = {
val nums = List(5, 2, 8, 1, 3)
val result = nums.sortBy(-_)
println(result)
}
}
@@ -0,0 +1,32 @@
package practise9.exercises
/*
* 练习 3:学生成绩排序
给:
val students = List(
("Tom", 80),
("Jack", 95),
("Alice", 70),
("Bob", 85)
)
使用 sortBy 按成绩从低到高排序:
(Alice,70)
(Tom,80)
(Bob,85)
(Jack,95)
提示:
_._2*/
object Exercises3 {
def main(args: Array[String]): Unit = {
val students = List(
("Tom", 80),
("Jack", 95),
("Alice", 70),
("Bob", 85)
)
val result = students.sortBy(_._2)
println(result)
}
}
@@ -0,0 +1,27 @@
package practise9.exercises
/*
* 练习 4:sortWith
还是上面的学生。
使用 sortWith:
按照成绩从高到低
结果:
List(
(Jack,95),
(Bob,85),
(Tom,80),
(Alice,70)
)*/
object Exercises4 {
def main(args: Array[String]): Unit = {
val students = List(
("Tom", 80),
("Jack", 95),
("Alice", 70),
("Bob", 85)
)
val result = students.sortWith((a, b) => a._2 > b._2)
println(result)
}
}
@@ -0,0 +1,24 @@
package practise9.exercises
/*
* 练习 5:groupBy
给:
val nums = List(1, 2, 3, 4, 5, 6, 7, 8)
按照奇偶分组:
偶数 → List(2,4,6,8)
奇数 → List(1,3,5,7)
提示:
groupBy(_ % 2)
得到的 Map 的 Key 会是:
0 → 偶数
1 → 奇数*/
object Exercises5 {
def main(args: Array[String]): Unit = {
val nums = List(1, 2, 3, 4, 5, 6, 7, 8)
val result = nums.groupBy(_ % 2)
println(result)
}
}
@@ -0,0 +1,49 @@
package practise9.exercises
/*
* 练习 6 ⭐:成绩分组
给:
val students = List(
("Tom", 85),
("Jack", 92),
("Alice", 76),
("Bob", 88),
("Lucy", 95),
("Mike", 60)
)
按照成绩分成:
优秀:>= 90
良好:>= 80
及格:>= 60
最终类似:
优秀 → Jack, Lucy
良好 → Tom, Bob
及格 → Alice, Mike
要求使用:
groupBy*/
object Exercises6 {
def main(args: Array[String]): Unit = {
val students = List(
("Tom", 85),
("Jack", 92),
("Alice", 76),
("Bob", 88),
("Lucy", 95),
("Mike", 60)
)
val result = students.groupBy(student => {
if (student._2 >= 90) {
"优秀"
}else if (student._2 >=80){
"良好"
}else if (student._2 >=60){
"及格"
}else "不及格"
})
println(result)
}
}
@@ -0,0 +1,40 @@
package practise9.exercises
/*
* 练习 7 ⭐⭐ 综合题
给:
val students = List(
("Tom", 85),
("Jack", 92),
("Alice", 76),
("Bob", 88),
("Lucy", 95),
("Mike", 60)
)
完成:
1. filter:去掉不及格成绩(< 60)
2. sortBy:按照成绩从高到低
3. map:只保留学生姓名
最终:
List(Lucy, Jack, Bob, Tom, Alice, Mike)*/
object Exercises7 {
def main(args: Array[String]): Unit = {
val students = List(
("Tom", 85),
("Jack", 92),
("Alice", 76),
("Bob", 88),
("Lucy", 95),
("Mike", 60)
)
val result = students
.filter(_._2 >= 60)
.sortBy(-_._2)
.map(_._1)
println(result)
}
}