From 9f60c6714ff7d3cc653e0d0a9ed6f5efb967c248 Mon Sep 17 00:00:00 2001 From: kennethcheng Date: Wed, 16 Sep 2026 10:02:02 +0800 Subject: [PATCH] =?UTF-8?q?feat:ChatGPT=E7=AC=AC=209=20=E8=AF=BE=EF=BC=9As?= =?UTF-8?q?ortBy=E3=80=81sortWith=E3=80=81groupBy?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../scala/practise9/demo/Demo1SortBy.scala | 17 +++++++ .../practise9/demo/Demo2SortByProperty.scala | 15 ++++++ .../demo/Demo3SortByUnderscore.scala | 15 ++++++ .../demo/Demo4SortByDescending.scala | 18 +++++++ .../scala/practise9/demo/Demo5SortWith.scala | 19 +++++++ .../demo/Demo6SortByAndSortWith.scala | 30 ++++++++++++ .../scala/practise9/demo/Demo7GroupBy.scala | 13 +++++ .../demo/Demo8GroupByStudentScore.scala | 28 +++++++++++ .../practise9/demo/Demo9CollectionChain.scala | 17 +++++++ .../practise9/exercises/Exercises1.scala | 16 ++++++ .../practise9/exercises/Exercises2.scala | 18 +++++++ .../practise9/exercises/Exercises3.scala | 32 ++++++++++++ .../practise9/exercises/Exercises4.scala | 27 ++++++++++ .../practise9/exercises/Exercises5.scala | 24 +++++++++ .../practise9/exercises/Exercises6.scala | 49 +++++++++++++++++++ .../practise9/exercises/Exercises7.scala | 40 +++++++++++++++ 16 files changed, 378 insertions(+) create mode 100644 src/main/scala/practise9/demo/Demo1SortBy.scala create mode 100644 src/main/scala/practise9/demo/Demo2SortByProperty.scala create mode 100644 src/main/scala/practise9/demo/Demo3SortByUnderscore.scala create mode 100644 src/main/scala/practise9/demo/Demo4SortByDescending.scala create mode 100644 src/main/scala/practise9/demo/Demo5SortWith.scala create mode 100644 src/main/scala/practise9/demo/Demo6SortByAndSortWith.scala create mode 100644 src/main/scala/practise9/demo/Demo7GroupBy.scala create mode 100644 src/main/scala/practise9/demo/Demo8GroupByStudentScore.scala create mode 100644 src/main/scala/practise9/demo/Demo9CollectionChain.scala create mode 100644 src/main/scala/practise9/exercises/Exercises1.scala create mode 100644 src/main/scala/practise9/exercises/Exercises2.scala create mode 100644 src/main/scala/practise9/exercises/Exercises3.scala create mode 100644 src/main/scala/practise9/exercises/Exercises4.scala create mode 100644 src/main/scala/practise9/exercises/Exercises5.scala create mode 100644 src/main/scala/practise9/exercises/Exercises6.scala create mode 100644 src/main/scala/practise9/exercises/Exercises7.scala diff --git a/src/main/scala/practise9/demo/Demo1SortBy.scala b/src/main/scala/practise9/demo/Demo1SortBy.scala new file mode 100644 index 0000000..c9a9cda --- /dev/null +++ b/src/main/scala/practise9/demo/Demo1SortBy.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/demo/Demo2SortByProperty.scala b/src/main/scala/practise9/demo/Demo2SortByProperty.scala new file mode 100644 index 0000000..8f867fa --- /dev/null +++ b/src/main/scala/practise9/demo/Demo2SortByProperty.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/demo/Demo3SortByUnderscore.scala b/src/main/scala/practise9/demo/Demo3SortByUnderscore.scala new file mode 100644 index 0000000..ed8cb24 --- /dev/null +++ b/src/main/scala/practise9/demo/Demo3SortByUnderscore.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/demo/Demo4SortByDescending.scala b/src/main/scala/practise9/demo/Demo4SortByDescending.scala new file mode 100644 index 0000000..f673d1f --- /dev/null +++ b/src/main/scala/practise9/demo/Demo4SortByDescending.scala @@ -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(-_)) + } +} diff --git a/src/main/scala/practise9/demo/Demo5SortWith.scala b/src/main/scala/practise9/demo/Demo5SortWith.scala new file mode 100644 index 0000000..a60983c --- /dev/null +++ b/src/main/scala/practise9/demo/Demo5SortWith.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/demo/Demo6SortByAndSortWith.scala b/src/main/scala/practise9/demo/Demo6SortByAndSortWith.scala new file mode 100644 index 0000000..da46de7 --- /dev/null +++ b/src/main/scala/practise9/demo/Demo6SortByAndSortWith.scala @@ -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 → 怎么比较 + } + +} diff --git a/src/main/scala/practise9/demo/Demo7GroupBy.scala b/src/main/scala/practise9/demo/Demo7GroupBy.scala new file mode 100644 index 0000000..6517375 --- /dev/null +++ b/src/main/scala/practise9/demo/Demo7GroupBy.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/demo/Demo8GroupByStudentScore.scala b/src/main/scala/practise9/demo/Demo8GroupByStudentScore.scala new file mode 100644 index 0000000..2fb9b6e --- /dev/null +++ b/src/main/scala/practise9/demo/Demo8GroupByStudentScore.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/demo/Demo9CollectionChain.scala b/src/main/scala/practise9/demo/Demo9CollectionChain.scala new file mode 100644 index 0000000..16fa7e6 --- /dev/null +++ b/src/main/scala/practise9/demo/Demo9CollectionChain.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/exercises/Exercises1.scala b/src/main/scala/practise9/exercises/Exercises1.scala new file mode 100644 index 0000000..76a98cb --- /dev/null +++ b/src/main/scala/practise9/exercises/Exercises1.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/exercises/Exercises2.scala b/src/main/scala/practise9/exercises/Exercises2.scala new file mode 100644 index 0000000..856cd36 --- /dev/null +++ b/src/main/scala/practise9/exercises/Exercises2.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/exercises/Exercises3.scala b/src/main/scala/practise9/exercises/Exercises3.scala new file mode 100644 index 0000000..d1f83f1 --- /dev/null +++ b/src/main/scala/practise9/exercises/Exercises3.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/exercises/Exercises4.scala b/src/main/scala/practise9/exercises/Exercises4.scala new file mode 100644 index 0000000..019b95f --- /dev/null +++ b/src/main/scala/practise9/exercises/Exercises4.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/exercises/Exercises5.scala b/src/main/scala/practise9/exercises/Exercises5.scala new file mode 100644 index 0000000..c2c5414 --- /dev/null +++ b/src/main/scala/practise9/exercises/Exercises5.scala @@ -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) + } +} diff --git a/src/main/scala/practise9/exercises/Exercises6.scala b/src/main/scala/practise9/exercises/Exercises6.scala new file mode 100644 index 0000000..02645c9 --- /dev/null +++ b/src/main/scala/practise9/exercises/Exercises6.scala @@ -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) + } +} + diff --git a/src/main/scala/practise9/exercises/Exercises7.scala b/src/main/scala/practise9/exercises/Exercises7.scala new file mode 100644 index 0000000..cd8a5d3 --- /dev/null +++ b/src/main/scala/practise9/exercises/Exercises7.scala @@ -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) + + } +}