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

头歌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);}
}

http://www.xdnf.cn/news/731.html

相关文章:

  • 【AI论文】CLIMB:基于聚类的迭代数据混合自举语言模型预训练
  • 2026《数据结构》考研复习笔记四(第一章)
  • 单例模式与消费者生产者模型,以及线程池的基本认识与模拟实现
  • Java学习手册:Filter 和 Listener
  • synchronized 与分布式锁
  • 约束:常见约束(常见约束-例子,外键约束)
  • Laravel-vite+vue开发前端模板
  • 最新扣子空间实操指南
  • QML--全局对象Qt
  • 1.Vue自动化工具安装(Vue-cli)
  • 自定义请求头导致跨域的解决办法
  • C++学习:六个月从基础到就业——内存管理:RAII原则
  • 键入网址到网页显示,期间发生了什么?
  • Arduino示例代码讲解:Project 08 - Digital Hourglass 数字沙漏
  • DAY 50 leetcode 1047--栈和队列.删除字符串中的所有相邻重复项
  • Spring MVC 如何体现 Model-View-Controller 各自的职责?它们之间是如何协作的?
  • 【Linux】进程状态
  • 【仓颉 + 鸿蒙 + AI Agent】CangjieMagic框架(17):PlanReactExecutor
  • OpenCV 自适应背景更新 cv2.accumulateWeighted
  • 【OC】AVPlayerLayer的学习
  • PG psql --single-transaction 参数功能
  • 秘密任务 3.0:如何通过 JWT 认证确保 WebSockets 安全
  • c++基础·左值右值
  • HBase安装与基本操作指南
  • 安卓单机斗地主,具备休闲挑战等多模式
  • paddleocr出现: [WinError 127] 找不到指定的程序解决办法
  • 一招解决所以Maven找不到依赖包的问题
  • 即插即用模块(1) -MAFM特征融合
  • javascript day4
  • LicheeRV Nano 与Ubuntu官方risc-v 镜像混合