第14章总结:lambda表达式与处理
14.1: lambada表达式
14.1.1:lambada表达式简介
无参数
package fourteen;
interface SayhHi{
String say();//抽象方法接口
}
public class NoParamDemo {
public static void main(String[] args) {
//无参数
//利用匿名内部类补全方法体
SayhHi sh1 = new SayhHi() {
public String say() {
return "这是匿名内部类";
}
};
System.out.print(sh1.say());
}
}
使用表达式表达
System.out.print(sh1.say());
//利用lambda表达式补全方法体
SayhHi sh2 =() -> {
return "这是lambda表达式";
};
System.out.println(sh2.say());
}
}
有参数
使用表达式
package fourteen;
interface AddInt{
int add(int a,int b);//抽象方法接口
}
public class Prama {
public static void main(String[] args) {
//有参数
//利用匿名内部类补全方法体
AddInt ai1 = new AddInt() {
public int add(int a,int b){
return a+b;
}
};
System.out.println("匿名内部类:" + ai1.add(3, 5));
//利用lambda表达式补全方法体
AddInt ai2=( a, b) -> {
return a+b ;
};
System.out.println("lambda表达式:"+ai2.add(3, 5));
}
}
例题
package fourteen;
interface CheckGrade {
String check(int grade); // 查询成绩结果
}
public class GradeDemo {
public static void main(String[] args) {
CheckGrade g = (n) -> { // lambda实现代码块
if (n >= 90 && n <= 100) { // 如果成绩在90-100
return "成绩为优"; // 输出成绩为优
} else if (n >= 80 && n < 90) { // 如果成绩在80-89
return "成绩为良"; // 输出成绩为良
} else if (n >= 60 && n < 80) { // 如果成绩在60-79
return "成绩为中"; // 输出成绩为中
} else if (n >= 0 && n < 60) { // 如果成绩小于60
return "成绩为差"; // 输出成绩为差
} else { // 其他数字不是有效成绩
return "成绩无效"; // 输出成绩无效
}
}; // 不要丢掉lambda语句后的分号
System.out.println(g.check(89)); // 输出查询结果
}
}
//14.3
//使用方法的引用补全方法体
双冒号::
static int add(int x, int y) {//方法的引用,这是方法体的方法
return x+y;
}
static int add(int x, int y) {//方法的引用,这是方法体的方法
return x+y;
}
完整代码
package fourteen;
interface AddInt{
int add(int a,int b);//抽象方法接口
}
public class Prama {
static int add(int x, int y) {//方法的引用,这是方法体的方法
//对象也可以找到这个方法体,非静态
return x+y;
}
public static void main(String[] args) {
//有参数
//利用匿名内部类补全方法体
AddInt ai1 = new AddInt() {
public int add(int a,int b){
return a+b;
}
};
System.out.println("匿名内部类:" + ai1.add(3, 5));
//利用lambda表达式补全方法体
AddInt ai2=( a, b) -> {
return a+b ;
};
System.out.println("lambda表达式:"+ai2.add(3, 5));
//使用方法的引用补全方法体
AddInt ai3 = Prama::add;//找到类,找到方法体
System.out.println("方法体:"+ai3.add(3, 5));
}
}
例14.8
package fourteen;
import java.text.SimpleDateFormat;
import java.util.Date;
interface InstanceMethodInterface { // 创建测试接口
String method(Date date); // 带参数的抽象方法
}
public class InstanceMethodDemo {
public String format(Date date) { // 格式化方法
// 创建日期格式化对象,并指定日期格式
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
return sdf.format(date); // 返回格式化结果
}
public static void main(String[] args) {
// 创建类对象
InstanceMethodDemo demo = new InstanceMethodDemo();
// 引用类对象的方法
InstanceMethodInterface im = demo::format;
Date date = new Date(); // 创建日期对象
System.out.println("默认格式:" + date); // 输出日期对象默认格式
// 输出经过接口方法处理过的格式
System.out.println("接口输出的格式:" + im.method(date));
}
}//14.8
//调用构造器
package fourteen;
interface ConIn{
ConDemo action();//创建接口,正好是这个类的构造器类型,抽象方法
}
public class ConDemo {
//使用无参的构造方法补全方法体
public ConDemo() {//构造方法要写小括号
System.out.println("无参构造方法");//构造方法
}
public ConDemo(int a) {//构造方法要写小括号
System.out.println("有参构造方法");//构造方法
}
public static void main(String args[]) {
ConIn ci1 = ConDemo:: new;//new一个对象
ci1.action();//调用action方法
//使用有参数的方法来补全方法体
//ConDemo action(int a);
//ConIn ci1 = ConDemo:: new;//new一个对象
//ci1.action(5);//调用action方法
}
}
流:
static List<Employee> getEmpList() { // 提供数据初始化方法
List<Employee> list = new ArrayList<Employee>();
// 添加员工数据
list.add(new Employee("老张", 40, 9000, "男", "运营部"));
list.add(new Employee("小刘", 24, 5000, "女", "开发部"));
list.add(new Employee("大刚", 32, 7500, "男", "销售部"));
list.add(new Employee("翠花", 28, 5500, "女", "销售部"));
list.add(new Employee("小马", 21, 3000, "男", "开发部"));
list.add(new Employee("老王", 35, 6000, "女", "人事部"));
list.add(new Employee("小王", 21, 3000, "女", "人事部"));
return list;
stream接口
package fourteen;
import java.util.List;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class StreamDemo {
public static void main(String[] args) {
List<Employee> list=Employee.getEmpList();//从employee表拿到list表中的员工表
Stream<Employee> stream = list.stream();//调用list方法将表转换成流
//筛选年龄>30岁的员工
stream=stream.filter(sx-> sx.getAge()>30);//写条件,sx属于临时变量
//限制条数
stream = stream.limit(2);
List<Employee> result = stream.collect(Collectors.toList());//转成List链表
for (Employee sx : result) {//for循环输出结果
System.out.println(sx);
}
}
}
数据分组
package fourteen;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.stream.Collectors;
import java.util.stream.Stream;
public class GroupDemo {
public static void main(String[] args) {
// 分组
List<Employee> list=Employee.getEmpList();//从employee表拿到list表中的员工表
Stream<Employee> stream = list.stream();//调用list方法将表转换成员工流
Map<String,List<Employee>> map = //创建map集合存入,String代指dept,list链表指代map集合的value
stream.collect(Collectors.groupingBy(Employee::getDept));//利用流调用collect方法,分组方法,传入方法
Set<String> depts = map.keySet();//获取map集合中的部门表
for(String dept:depts){//for循环一个部门,depts代指部门
System.out.println(dept+"员工信息如下:");//输出信息
List<Employee> temp = map.get(dept);//分组列表输出
for(Employee g : temp){//temp是临时变量
System.out.println(g);//
}
System.out.println();
}
}
}
相关文章:

第14章总结:lambda表达式与处理
14.1: lambada表达式 14.1.1:lambada表达式简介 无参数 package fourteen; interface SayhHi{ String say();//抽象方法接口 } public class NoParamDemo { public static void main(String[] args) { //无参数 …...

多尺度retinex图像去雾算法matlab仿真
目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 clc; clear; close all; warning off; addpath(genpath(pwd)); rng(default)img_in im2doub…...
蓝桥等考Python组别十八级005
第一部分:选择题 1、Python L18 (15分) 运行下面程序,输入30,输出的结果是( )。 t = int(input()) if t < 30: print(0) else: print(t // 15 * 2) 4102030正确答案:A 2、Python L18 (15分)...

redis在linux系统的安装与使用
一、单机安装Redis。 1.安装redis依赖 在控制台输入 yum install -y gcc tcl2.上传安装包 下载好的安装包上传到/usr/local/src/ 上传方法: 1.确保你拥有Linux服务器的IP地址、用户名和密码。 2.在Windows上,打开命令提示符(Command Promp…...

PanoFlow:学习360°用于周围时间理解的光流
1.摘要: 光流估计是自动驾驶和机器人系统中的一项基本任务,它能够在时间上解释交通场景。自动驾驶汽车显然受益于360提供的超宽视野(FoV)◦ 全景传感器。 然而,由于全景相机独特的成像过程,为针孔图像设计…...
C# - 常用API
Assembly.GetCallingAssembly 方法 获取当前方法的调用程序集: Console.WriteLine("FirstMethod called from: " Assembly.GetCallingAssembly().FullName); Assembly.GetExecutingAssembly 方法 获取包含当前执行的代码的程序集: //获取当前执行的代码的程序集…...

新式茶饮品牌如何写出生活感软文
居民消费水平的提升使新式茶饮品牌的市场不断扩张,在竞争激烈的茶饮市场中,品牌提高知名度的主要方式之一就是软文营销,而生活感软文是茶饮软文中较为常见的类型,它能有效拉进品牌与消费者之间的距离,那么新式茶饮品牌…...

使用c++视觉处理----canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测
使用c视觉处理canny 边缘检测、sobel边缘检测、scharr 滤波边缘检测 #include <opencv2/opencv.hpp>int main() {// 读取图像cv::Mat image cv::imread("1.jpg", cv::IMREAD_GRAYSCALE); // 转为灰度图像if (image.empty()) {std::cerr << "无法加…...

gogs和drone如何配合使用
上篇介绍了drone和gogs安装方法,这次介绍这两个如何使用,此篇文章主要介绍在物理机上进行发布。 此处用到的java项目地址:https://gitee.com/huningfei/demo-test 一 配置gogs 1.1 在Gogs中配置指定仓库的”.drone.yml“文件 1.2 ssh-drone…...
Feign客户端的配置与使用
feign Feign的基本使用Feign客户端抽取 Feign的基本使用 Feign是一个声明式的Web服务客户端,它使得编写Web服务客户端变得更加简单。 1、首先,需要在项目中引入Feign的相关依赖。在Maven项目中,可以添加以下依赖: <dependen…...

【数据结构】队列(Queue)实现详解
🚩纸上得来终觉浅, 绝知此事要躬行。 🌟主页:June-Frost 🚀专栏:数据结构 🔥该文章主要了解实现队列的相关操作。 目录: 🌍 队列🔭概念🔭结构&…...
23.10.13数据库升级流程记录
23.10.13数据库升级流程记录 hello,我是阿昌,今天记录一下数据库升级的流程,内容如下: 一、升级的内容 将之前的数据库升级为8.0版本,切只涉及一个分库; 二、升级的时机 涉及到数据库升级,…...

【three.js】结合vue进行开发第一个3d页面
一、创建vue项目 新建一个项目目录,在集成终端打开,输入 npm init vitelatest 回车后,依次输入项目名,选择vue和js开发 然后安装依赖并运行项目 二、安装three 接下来我们开始安装three npm install three 三、Three.js 的…...
【Vue】同一个页面多次复用同一个组件数据相互干扰问题
文章目录 问题描述解决方法 问题描述 第二个child会受到第一个child的影响而线上666的值 <template><child :value"666" /><child /> </template> <script> import child from ./child; export default {components: {child,},data(…...

【深度学习实验】卷积神经网络(八):使用深度残差神经网络ResNet完成图片多分类任务
目录 一、实验介绍 二、实验环境 1. 配置虚拟环境 2. 库版本介绍 三、实验内容 0. 导入必要的工具包 1. 构建数据集(CIFAR10Dataset) a. read_csv_labels() b. CIFAR10Dataset 2. 构建模型(FeedForward&#x…...

HarmonyOS学习 -- ArkTS开发语言入门
文章目录 一、编程语言介绍二、TypeScript基础类型1. 布尔值2. 数字3. 字符串4. 数组5. 元组6. 枚举7. unknown8. void9. null 和 undefined10. 联合类型 三、TypeScript基础知识条件语句if语句switch语句 函数定义有名函数和匿名函数可选参数剩余参数箭头函数 类1. 类的定义2.…...

早安心语|不委屈不将就,让生活充满仪式感
1、让自己的生活多一种可能,给自己的未来多一份惊喜,人生所有的机会和惊喜,都是在你全力以赴的道路上遇到的。 2、推开自己喜欢的人叫成长,留住自己喜欢的人叫本事,总有人嫌你不够好,也有人觉得你哪都好&am…...
[Python进阶] 操纵键盘:pyuserinput
6.3 操纵键盘:pyuserinput 6.3.1 说明 在安装pyuserinput库时会自动安装PyMouse和PyKeyboard库。前者主要用来操作鼠标,包括鼠标的点击、移动等。后者主要用来操作键盘,包括键盘按键的按下、弹起等。这两个库还可以同时对鼠标和键盘的事件进…...

解析Moonbeam的安全性、互操作性和市场竞争力
Moonbeam依托Polkadot Substrate框架构建,用Rust程序设计语言创建的智能合约区块链平台,在继承Polkadot安全性的基础上为项目提供以太坊虚拟机(EVM)的兼容性和原生的跨链互操作性优势。Moonbeam的EVM兼容性表示开发者无需学习Subs…...
RPA是什么?怎么成为RPA高手?
RPA(Robotic Process Automation,机器人流程自动化)是一种技术,通过软件机器人模拟人类在计算机上执行重复性任务,从而提高生产力、减少错误并降低成本。RPA 可以广泛应用于金融、医疗、制造、零售等多个行业ÿ…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする
日语学习-日语知识点小记-构建基础-JLPT-N4阶段(33):にする 1、前言(1)情况说明(2)工程师的信仰2、知识点(1) にする1,接续:名词+にする2,接续:疑问词+にする3,(A)は(B)にする。(2)復習:(1)复习句子(2)ために & ように(3)そう(4)にする3、…...
Qt Widget类解析与代码注释
#include "widget.h" #include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui->setupUi(this); }Widget::~Widget() {delete ui; }//解释这串代码,写上注释 当然可以!这段代码是 Qt …...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

【机器视觉】单目测距——运动结构恢复
ps:图是随便找的,为了凑个封面 前言 在前面对光流法进行进一步改进,希望将2D光流推广至3D场景流时,发现2D转3D过程中存在尺度歧义问题,需要补全摄像头拍摄图像中缺失的深度信息,否则解空间不收敛…...

全球首个30米分辨率湿地数据集(2000—2022)
数据简介 今天我们分享的数据是全球30米分辨率湿地数据集,包含8种湿地亚类,该数据以0.5X0.5的瓦片存储,我们整理了所有属于中国的瓦片名称与其对应省份,方便大家研究使用。 该数据集作为全球首个30米分辨率、覆盖2000–2022年时间…...

Nuxt.js 中的路由配置详解
Nuxt.js 通过其内置的路由系统简化了应用的路由配置,使得开发者可以轻松地管理页面导航和 URL 结构。路由配置主要涉及页面组件的组织、动态路由的设置以及路由元信息的配置。 自动路由生成 Nuxt.js 会根据 pages 目录下的文件结构自动生成路由配置。每个文件都会对…...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

ArcGIS Pro制作水平横向图例+多级标注
今天介绍下载ArcGIS Pro中如何设置水平横向图例。 之前我们介绍了ArcGIS的横向图例制作:ArcGIS横向、多列图例、顺序重排、符号居中、批量更改图例符号等等(ArcGIS出图图例8大技巧),那这次我们看看ArcGIS Pro如何更加快捷的操作。…...
.Net Framework 4/C# 关键字(非常用,持续更新...)
一、is 关键字 is 关键字用于检查对象是否于给定类型兼容,如果兼容将返回 true,如果不兼容则返回 false,在进行类型转换前,可以先使用 is 关键字判断对象是否与指定类型兼容,如果兼容才进行转换,这样的转换是安全的。 例如有:首先创建一个字符串对象,然后将字符串对象隐…...