当前位置: 首页 > 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);}
}

相关文章:

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

第1关&#xff1a;利用lambda表达式对Book数组按多个字段进行排序 任务描述 本关任务&#xff1a;利用Comparator接口完成对Book数组同时按多个字段进行排序。 编程要求 1、本任务共有三个文件&#xff0c;可查看各文件的内容 2、无需修改SortBy.java枚举文件及Book.java类文…...

Jsp技术入门指南【九】详细讲解JSTL

Jsp技术入门指南【九】详细讲解JSTL 前言一、什么是JSTL&#xff1f;&#xff08;JavaServer Pages Standard Tag Library&#xff09;二、使用JSTL前的准备三、核心标签库常用标签详解1. <c:out>&#xff1a;输出内容&#xff08;替代<% %>&#xff09;2. <c:i…...

【C语言】用铁路系统来类比流,管道,进程,线程,内存,输入输出等

用**铁路网络**来比喻计算机中的这些概念会非常形象。下面是一个完整的类比体系,帮助你直观理解它们之间的关系: --- ### **1. 核心角色对照表** | **计算机概念** | **铁路网络比喻** | |--------…...

PCA——主成分分析数学原理及代码

主成分分析 PCA的目的是&#xff1a;对数据进行一个线性变换&#xff0c;在最大程度保留原始信息的前提下去除数据中彼此相关的信息。反映在变量上就是说&#xff0c;对所有的变量进行一个线性变换&#xff0c;使得变换后得到的变量彼此之间不相关&#xff0c;并且是所有可能的…...

[Windows] Adobe Camera Raw 17.2 win/Mac版本

[Windows] Adobe Camera Raw 链接&#xff1a;https://pan.xunlei.com/s/VOOIAXoyaZcKAkf_NdP-qw_6A1?pwdpd5k# Adobe Camera Raw&#xff0c;支持Photoshop&#xff0c;lightroom等Adobe系列软件&#xff0c;对相片无损格式进行编辑调色。 支持PS LR 2022 2023 2024 2025版…...

基于计算机视觉的行为检测:从原理到工业实践

一、行为检测的定义与核心价值 行为检测(Action Recognition)是计算机视觉领域的关键任务,旨在通过分析视频序列理解人类动作的时空特征。其核心价值体现在时序建模和多尺度分析能力上——系统需要捕捉动作的起始、发展和结束全过程,同时适应不同持续时间(0.1秒至数分钟)…...

基于 OpenCV 的图像与视频处理

基于 OpenCV 的图像处理 一、实验背景 OpenCV 是一个开源的计算机视觉库&#xff0c;广泛应用于图像处理、视频分析、目标检测等领域。通过学习 OpenCV&#xff0c;可以快速实现图像和视频的处理功能&#xff0c;为复杂的应用开发 奠定基础。本实验旨在通过实际代码示例&…...

B树的异常恢复

B-Tree & Crash Recovery B树作为平衡的n叉树 高度平衡树 许多实用的二叉树&#xff08;如AVL树或红黑树&#xff09;被称为高度平衡树&#xff0c;这意味着树的高度&#xff08;从根节点到叶子节点&#xff09;被限制为Ο(log &#x1d441;)&#xff0c;因此查找操作的…...

Centos9 离线安装 MYSQL8

centos 9 离线安装 mysql 8 参考教程 1. 官网下载mysql 下载地址 2. 将文件传输到Centos中解压 软件全部安装到了/opt中 在opt中新建mysql目录&#xff0c;解压到mysql目录中 tar -xvf mysql压缩文件 mysql[rootcentoshost mysql]# ls mysql-community-client-8.4.5-1.e…...

【RabbitMQ | 第2篇】RabbitMQ 控制台实现消息路由 + 数据隔离

文章目录 同步调用和异步调用MQRabbitMQ1. RabbitMQ控制台实现交换机路由到队列1.1 创建队列1.2 将消息发送给交换机&#xff0c;是否会到达队列 2. RabbitMQ控制台实现数据隔离2.1 添加一个用户2.2 创建新的虚拟主机 同步调用和异步调用 同步调用是指完成一个功能&#xff0c…...

算法—选择排序—js(场景:简单实现,不关心稳定性)

选择排序原理&#xff1a;&#xff08;简单但低效&#xff09; 每次从未排序部分选择最小元素&#xff0c;放到已排序部分的末尾。 特点&#xff1a; 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(1) 不稳定排序 // 选择排序 function selectionSort(arr) {for (let …...

龙舟中国行走进湖南娄底 2025湖南省龙舟联赛娄底站盛大举行

鼓声震天破碧波&#xff0c;百舸争流显豪情。2025年4月20日星期日&#xff0c;"龙舟中国行2025"首站——龙舟中国行走进湖南娄底2025湖南省龙舟联赛娄底双峰站在双峰县湄水河育才桥至风雨桥水域火热开赛。12支劲旅劈波斩浪&#xff0c;在青山绿水间上演传统与现代交织…...

重构之去除多余的if-else

一、提前返回&#xff08;Guard Clauses&#xff09; 适用场景&#xff1a;当 else 块仅用于处理异常或边界条件时。 优化前&#xff1a;if (isValid) {doSomething(); } else {return; }优化后&#xff1a;if (!isValid) return; // 提前处理异常&#xff0c;主流程保持简洁…...

【Vim】vim的简单使用

文章目录 1. vi的模式2. 按键使用说明2.1 一般命令模式光标移动替换和查找删除/复制/粘贴 2.2 编辑模式插入/替换 2.3 命令行模式保存/退出环境修改 3. vim的缓存4. vim可视区块5. vim多文件编辑6. vim多窗口功能7. vim关键词补全 1. vi的模式 一般命令模式&#xff1a;以vi打…...

【消息队列RocketMQ】一、RocketMQ入门核心概念与架构解析

在当今互联网技术飞速发展的时代&#xff0c;分布式系统的架构设计愈发复杂。消息队列作为分布式系统中重要的组件&#xff0c;在解耦应用、异步处理、削峰填谷等方面发挥着关键作用。RocketMQ 作为一款高性能、高可靠的分布式消息中间件&#xff0c;被广泛应用于各类互联网场景…...

hadoop分布式部署

1. 上传jdk和hadoop安装包到服务器 2. 解压压缩包 tar xf jdk1.8.0_112.tgz -C /usr/local/ tar xf hadoop-3.3.6.tar.gz -C /usr/local/3. 关闭防火墙 systemctl stop firewalld systemctl disable firewalld4. 修改配置文件 core-site.xml、hadoop-env.sh、yarn-env.sh、…...

C++面试题集合(附答案)

C全家桶 C基础 1. C和C有什么区别&#xff1f; 2. C语言的结构体和C的有什么区别&#xff1f; 3. C 语言的关键字 static 和 C 的关键字 static 有什么区别&#xff1f; 4. C 和 Java有什么核心区别&#xff1f; 5. C中&#xff0c;a和&a有什么区别&#xff1f; 6. …...

23种设计模式-结构型模式之装饰器模式(Java版本)

Java 装饰器模式&#xff08;Decorator Pattern&#xff09;详解 &#x1f381; 什么是装饰器模式&#xff1f; 装饰器模式是一种结构型设计模式&#xff0c;允许向一个对象动态添加新的功能&#xff0c;而不改变其结构。 &#x1f9f1; 你可以想象成在原有功能上“包裹”一…...

UE5的BumpOffset节点

BumpOffset 节点的基本概念 本质上&#xff0c;BumpOffset 节点通过扭曲或偏移纹理坐标来创造深度错觉。它基于视角方向和高度信息动态地调整纹理采样位置&#xff0c;使平面表面看起来具有凹凸感。这是一种称为视差映射(Parallax Mapping)的技术的实现。 当你从不同角度观察…...

从跌倒到领跑:北京亦庄机器人马拉松如何改写人机协作未来?

目录 一、当铁骨遇见马拉松精神 二、半马背后的硬核突破 三、赛事背后的科技博弈 四、当机器人走出实验室 跌倒者的荣光 清晨7:30的南海子公园,发令枪响瞬间——20台形态各异的机器人以千奇百怪的姿态冲出起跑线,有的像蹒跚学步的孩童,有的如专业运动员般矫健,更有机器…...

Internet Protocol

一、IP 1. 基本概念 IP定义&#xff1a;IP 是为计算机网络相互连接进行通信而设计的协议&#xff0c;它规定了网络设备如何标识和寻址&#xff0c;以及数据如何在网络中传输和路由。IP作用&#xff1a;主要负责在不同的网络之间转发数据包&#xff0c;使数据能够从源主机准确…...

Android学习之实战登录注册能力

我们可以从本地 Token 存储、时效管理、服务端通知联动、定时器优化四个维度深入展开 一、本地 Token 存储设计&#xff08;基于 SharedPreferences&#xff09; 1. 存储结构优化&#xff08;包含时效性字段&#xff09; // 定义存储类&#xff08;封装SharedPreferences操作…...

【数据可视化-19】智能手机用户行为可视化分析

&#x1f9d1; 博主简介&#xff1a;曾任某智慧城市类企业算法总监&#xff0c;目前在美国市场的物流公司从事高级算法工程师一职&#xff0c;深耕人工智能领域&#xff0c;精通python数据挖掘、可视化、机器学习等&#xff0c;发表过AI相关的专利并多次在AI类比赛中获奖。CSDN…...

基于一致性哈希算法原理和分布式系统容错机制

一、传统取模算法的局限性分析 当使用User ID取模路由时&#xff0c;Pod挂断会导致以下问题&#xff1a; 数据雪崩效应&#xff1a;节点失效后所有请求需要重新计算取模值&#xff0c;导致缓存穿透和服务震荡服务不可用窗口&#xff1a;节点失效期间&#xff0c;原本路由到该节…...

[SpringBoot-1] 概述和快速入门(使用vscode)

1 SpringBoot 概念 SpringBoot提供了一种快速使用Spring的方式&#xff0c;基于约定优于配置的思想&#xff0c;可以让开发人员不必在配置与逻辑业务之间进行思维的切换&#xff0c;全身心的投入到逻辑业务的代码编写中&#xff0c;从而大大提高了开发的效率&#xff0c;一定程…...

学习笔记二十——Rust trait

&#x1f9e9; Rust Trait 彻底搞懂版 &#x1f440; 目标读者&#xff1a;对 Rust 完全陌生&#xff0c;但想真正明白 “Trait、Trait Bound、孤岛法则” 在做什么、怎么用、为什么这样设计。 &#x1f6e0; 方法&#xff1a; 先给“心里模型”——用生活类比把抽象概念掰开揉…...

llama factory

微调大模型可以像这样轻松… https://github.com/user-attachments/assets/e6ce34b0-52d5-4f3e-a830-592106c4c272 选择你的打开方式&#xff1a; 入门教程&#xff1a;https://zhuanlan.zhihu.com/p/695287607框架文档&#xff1a;https://llamafactory.readthedocs.io/zh-…...

机器学习 Day12 集成学习简单介绍

1.集成学习概述 1.1. 什么是集成学习 集成学习是一种通过组合多个模型来提高预测性能的机器学习方法。它类似于&#xff1a; 超级个体 vs 弱者联盟 单个复杂模型(如9次多项式函数)可能能力过强但容易过拟合 组合多个简单模型(如一堆1次函数)可以增强能力而不易过拟合 集成…...

基于 Spring Boot 瑞吉外卖系统开发(五)

基于 Spring Boot 瑞吉外卖系统开发&#xff08;五&#xff09; 删除分类 分类列表中每条分类信息右侧提供了一个“删除”按钮&#xff0c;当需要将已经存在的分类信息删除时&#xff0c;可以通过单击“删除”按钮实现。 请求路径为/category&#xff0c;携带参数id&#xf…...

PyTorch基础笔记

PyTorch张量 多维数组&#xff1a;张量可以是标量&#xff08;0D&#xff09;、向量&#xff08;1D&#xff09;、矩阵&#xff08;2D&#xff09;或更高维的数据&#xff08;3D&#xff09;。 数据类型&#xff1a;支持多种数据类型&#xff08;如 float32, int64, bool 等&a…...

什么是 IDE?集成开发环境的功能与优势

原文&#xff1a;什么是 IDE&#xff1f;集成开发环境的功能与优势 | w3cschool笔记 &#xff08;注意&#xff1a;此为科普文章&#xff0c;请勿标记为付费文章&#xff01;且此文章并非我原创&#xff0c;不要标记为付费&#xff01;&#xff09; IDE 是什么&#xff1f; …...

基于大数据的房产估价解决方案

基于大数据的房产估价解决方案 一、项目背景与目标 1.1 背景 在房地产市场中&#xff0c;准确的房产估价至关重要。传统的房产估价方法往往依赖于估价师的经验和有限的数据样本&#xff0c;存在主观性强、效率低等问题。随着大数据技术的发展&#xff0c;大量的房产相关数据被积…...

基于深度学习的线性预测:创新应用与挑战

一、引言 1.1 研究背景 深度学习作为人工智能领域的重要分支&#xff0c;近年来在各个领域都取得了显著的进展。在线性预测领域&#xff0c;深度学习也逐渐兴起并展现出强大的潜力。传统的线性预测方法在处理复杂数据和动态变化的情况时往往存在一定的局限性。而深度学习凭借…...

WEMOS LOLIN32

ESP32是結合Wi-Fi和藍牙的32位元系統單晶片&#xff08;SoC&#xff09;與外接快閃記憶體的模組。許多廠商生產採用ESP32模組的控制板&#xff0c;最基本的ESP控制板包含ESP32模組、直流電壓轉換器和USB序列通訊介面IC。一款名為WEMOS LOLIN32的ESP32控制板具備3.7V鋰電池插座。…...

VSCode 扩展离线下载方法

学习自该文章&#xff0c;感谢作者&#xff01; 2025 年 VSCode 插件离线下载攻略&#xff1a;官方渠道一键获取 - 知乎 获取扩展关键信息 方法一&#xff1a;官网获取 打开 VSCode 扩展官方网站 搜索要下载的扩展&#xff0c;以 CodeGeeX 为例&#xff0c;网址为&#xf…...

计算机视觉与深度学习 | RNN原理,公式,代码,应用

RNN(循环神经网络)详解 一、原理 RNN(Recurrent Neural Network)是一种处理序列数据的神经网络,其核心思想是通过循环连接(隐藏状态)捕捉序列中的时序信息。每个时间步的隐藏状态 ( h_t ) 不仅依赖当前输入 ( x_t ),还依赖前一时间步的隐藏状态 ( h_{t-1} ),从而实现…...

对于网络资源二级缓存的简单学习

缓存学习 前言认识缓存磁盘储存内存储存磁盘内存组合优化 具体实现WebCacheMD5签名 WebDownloadOperationWebDownloaderWebCombineOperation 总结 前言 在最近的写的仿抖音app中&#xff0c;遇到了当往下滑动视频后&#xff0c;当上方的视频进入复用池后&#xff0c;会自动清空…...

【计量地理学】实验六 地理属性空间插值

一、实验目的 本次实验的主要目的在于熟练掌握空间克里格法插值的理论基础&#xff0c;包括其核心概念和步骤&#xff0c;能够通过数据可视化和统计分析方法识别数据中的异常值&#xff0c;并且掌握数据正态性的检验方法&#xff0c;理解正态分布对克里格法的重要性&#xff0…...

26考研 | 王道 | 数据结构 | 第六章 图

第六章 图 文章目录 第六章 图6.1. 图的基本概念6.2. 图的存储6.2.1. 邻接矩阵6.2.2. 邻接表6.2.3. 十字链表、临接多重表6.2.4. 图的基本操作 6.3. 图的遍历6.3.1. 广度优先遍历6.3.2. 深度优先遍历6.3.3 图的遍历与连通性 6.4. 图的应用6.4.1. 最小生成树6.4.2. 无权图的单源…...

window.addEventListener 和 document.addEventListener

window.addEventListener 和 document.addEventListener 是 JavaScript 中绑定事件的两个常用方法&#xff0c;核心区别在于 绑定的对象不同&#xff0c;导致事件的作用范围、触发时机和适用场景不同。下面用最直白的语言和案例对比说明&#xff1a; 一、核心区别&#xff1a;…...

51单片机的原理图和PCB绘制

51单片机最小系统原理图 加了两个led灯和按键检测电路。 PCB中原件摆放位置 成品 资源链接&#xff1a;https://download.csdn.net/download/qq_61556106/90656365...

kotlin知识体系(五) :Android 协程全解析,从作用域到异常处理的全面指南

1. 什么是协程 协程(Coroutine)是轻量级的线程&#xff0c;支持挂起和恢复&#xff0c;从而避免阻塞线程。 2. 协程的优势 协程通过结构化并发和简洁的语法&#xff0c;显著提升了异步编程的效率与代码质量。 2.1 资源占用低&#xff08;一个线程可运行多个协程&#xff09;…...

数据通信学习笔记之OSPF其他内容3

对发送的 LSA 进行过滤 当两台路由器之间存在多条链路时&#xff0c;可以在某些链路上通过对发送的 LSA 进行过滤&#xff0c;减少不必要的重传&#xff0c;节省带宽资源。 通过对 OSPF 接口出方向的 LSA 进行过滤可以不向邻居发送无用的 LSA&#xff0c;从而减少邻居 LSDB 的…...

Kubernetes相关的名词解释API Server组件(9)

什么是API Server&#xff1f; API Server&#xff08;kube-apiserver&#xff09; 是 Kubernetes 的核心组件之一&#xff0c;负责管理整个集群的通信和操作入口。 API Server 的作用在整个 Kubernetes 集群的正常运作中至关重要&#xff0c;可以说它是整个系统的神经中枢。…...

[密码学实战]密码服务平台部署架构详解与学习路线

密码服务平台部署架构详解与学习路线 引言 在数字化转型的浪潮中,数据安全已成为企业生存的“生命线”。国密算法(SM2/SM3/SM4)作为我国自主研发的密码标准,正在政务、金融、医疗等领域加速落地。然而,构建一套高可用、高性能、合规的密码服务平台,仍需攻克架构设计、性…...

如何成为Prompt工程师:学习路径、核心技能与职业发展

一、什么是Prompt工程师&#xff1f; Prompt工程师是专注于通过设计、优化和调试大语言模型&#xff08;LLM&#xff09;的输入提示词&#xff08;Prompt&#xff09;&#xff0c;以精准引导模型输出符合业务需求结果的技术人才。其核心能力在于将模糊的业务需求转化为结构化、…...

OpenCV 边缘检测(Edge Detection)cv2.Canny

OpenCV 边缘检测&#xff08;Edge Detection&#xff09;cv2.Canny flyfish import cv2video_path input_video.mp4 cap cv2.VideoCapture(video_path)while True:ret, frame cap.read()if not ret:break # 视频结束# 转灰度frame_gray cv2.cvtColor(frame, cv2.COLOR_B…...

【C++】win 10 / win 11:Dev-C++ 下载与安装

目录 一、Dev-C 下载 &#xff08;1&#xff09;sourceforge 官网下载 &#xff08;2&#xff09;腾讯官网下载 二、Dev-C 安装 三、Dev-C 配置 &#xff08;1&#xff09;配置 C11 &#xff08;2&#xff09;配置产生调试信息 &#xff08;3&#xff09;个性化配置…...

2025年MathorCup竞赛助攻资料免费分享

对于本界竞赛B题其中问题需要设计软件框架&#xff0c;对于该问题回答&#xff0c;个人认为可以在设计框架下简单的进行软件展示&#xff0c;下面是初步展示的结果&#xff0c;仅供参考 【问题四&#xff1a;老城区平移置换决策软件设计】规划局希望这个案例能起到示范作用&am…...

征程 6 VIO 通路断流分析

自动驾驶场景中&#xff0c;常见的是多路感知通路&#xff0c;在不考虑应用获取释放帧异常操作的前提下&#xff0c;一般出现帧获取异常的情况&#xff0c;主要原因是通路中某段断流的情况&#xff0c;如何去准确的定位&#xff0c;对大部分客户来说&#xff0c;依赖我司的支持…...