当前位置: 首页 > news >正文

头歌java课程实验(函数式接口及lambda表达式)

第1关:利用lambda表达式对Book数组按多个字段进行排序

任务描述
本关任务:利用Comparator接口完成对Book数组同时按多个字段进行排序。

编程要求
1、本任务共有三个文件,可查看各文件的内容
2、无需修改SortBy.java枚举文件及Book.java类文件的内容
3、修改完善Test.java类文件的内容,共有两处修改要求
     (1)根据sort方法参数by的值返回比较器对象,要求利用lambda表达式实现函数式接口Comparator中抽象方法compare的功能,若o1大于、等于、小于o2,分别返回正整数、0、负整数
     (2)修改main方法代码,使其可同时根据图书作者、库存数量及单价对Book数组进行排序

运行示例
下面是按要求完成修改后正确的显示结果:
读城记       易中天    10    26.00
品人录       易中天    20    21.80
品三国       易中天    20    50.00
连城诀       金庸       5      18.50
雪山飞狐    金庸       5      19.00
鹿鼎记       金庸       5       96.00
碧血剑       金庸       10     38.00
笑傲江湖    金庸       20     76.00

测试说明
平台会对你编写的代码进行测试~

开始你的任务吧,祝你成功!

Test.java:

import java.util.Arrays;
import java.util.Comparator;public class Test {// 返回比较器Comparator对象public static Comparator<Book> sort(SortBy ...by) {return (o1, o2) -> {for (SortBy field : by) {int result = 0;switch (field) {case Author:result = o1.author.compareTo(o2.author);break;case Price:result = Double.compare(o1.price, o2.price);break;case Number:result = Integer.compare(o1.number, o2.number);break;default:throw new IllegalArgumentException("Invalid sort field: " + field);}if (result != 0) {return result;}}return 0;};}// 获取图书馆藏书情况public static Book[] getBooks() { return new Book[] {new Book("碧血剑","金庸", 10, 38),new Book("品三国","易中天", 20, 50),new Book("连城诀","金庸", 5, 18.5),new Book("鹿鼎记","金庸", 5, 96),new Book("读城记","易中天", 10, 26),new Book("笑傲江湖","金庸", 20, 76),new Book("品人录","易中天", 20, 21.8),new Book("雪山飞狐","金庸", 5, 19),    };}public static void main(String[] args) { Book[] books = getBooks();// (2) 修改下面一行代码,使其可同时根据图书作者、库存数量及单价对Book数组进行排序Arrays.sort(books, sort(SortBy.Author, SortBy.Number, SortBy.Price));// 循环显示排序后的结果for (Book book : books) { System.out.println(book);}}
}

SortBy.java:

//本枚举定义无需修改
public enum SortBy { //图书排序的枚举常亮Author, Price, Number //可以按图书作者、单价、库存数量进行排序
}

Book.java:
 

//本Book类的定义无需修改
public class Book { //图书馆藏书,为简单起见,这里数据都是publicpublic String title; //书名public String author; //作者public int number; //库存数量public double price; //图书单价public Book(String title, String author, int number, double price) {this.title=title;this.author=author;this.number=number;this.price=price;}@Overridepublic String toString() {return String.format("%s\t%s\t%d\t%.2f", title, author, number, price);}
}

相关文章:

  • 七段码 路径压缩 并查集 dfs
  • Datawhale AI春训营 TASK2 学习笔记
  • 用P0口控制LED(STC89C52单片机)
  • QEMU源码全解析 —— 块设备虚拟化(20)
  • 硬件电路(25)-过温保护器件ksd9700温控开关
  • 图例QCPLegend
  • 深入理解基线检查:网络安全的基石
  • 基于 JavaWeb 的 SpringBoot 办公 ERP 管理系统设计与实现(源码+文档+部署讲解)
  • 从浏览器地址栏输入 URL 到网页显示,这中间发生了什么?
  • [matlab]子图排版和线性回归
  • MySQL8启动失败 NET HELPMSG 3534
  • 016-C语言内存函数
  • 【HarmonyOS 5】VisionKit人脸活体检测详解
  • 【特殊场景应对3】创意岗简历骚操作:作品集链接的正确打开方式
  • 【Vue】组件通信(Props/Emit、EventBus、Provide/Inject)
  • keil5烧录后No Debug
  • (三)mac中Grafana监控Linux上的Redis(Redis_exporter安装使用)
  • 在win上安装Ubuntu安装Anaconda(linx环境)
  • 6.数据手册解读—运算放大器(三)
  • LeetCode hot 100—分割等和子集
  • 姜仁华任中国水稻研究所所长,胡培松院士卸任
  • 不降息就走人?特朗普试图开先例罢免美联储主席,有无胜算
  • 财政部:一季度证券交易印花税411亿元,同比增长60.6%
  • 如此城市|漫步瑞金医院展览,艺术可以成为一种“社会雕塑”
  • 许志强评《伐木》|伯恩哈德的文人共和国
  • 体坛联播|曼联加时赛神奇逆转,晋粤大战CBA再出重磅罚单