JAVA SE 8 学习笔记(一)lambda表达式

Elasticsearch RestHighLevelClient 已标记为被弃用 它的替代方案 Elasticsearch Java API Client 的基础教程及迁移方案 在Elasticsearch7.15版本之后,Elasticsearch官方宣布弃用了它的高级客户端RestHighLevelClient。同时推出了全新的Java API客户端Elasticsearch Java API Client。 Elasticsearch Java API Client 支持除 Vector tile search API 和 Find structure API 之外的所有 Elasticsearch API。且支持所有API数据类型,并且不再有原始JsonValue属性。它 阅读详情

JAVA SE 8 学习笔记 是在学习《写给大忙人看的java se 8》一书后进行复习总结,以备随时查看

如需学习详细内容,请支持正版图书


1. Lamda表达式


Lamda表达式是一段可以传递的代码,可以被执行多次。


语法:(参数..)  -> {表达式}

例:

(String first, String second) -> {if(first.length() < second.length()) return -1; else return 0}


如果参数只有一个可以省略小括号

如果没有参数可以提供一堆空的小括号

如果参数类型可以被推导,那么可以省略参数类型

如果代码块只有一行可以省略大括号


对于只包含一个抽象方法的接口,称为函数式接口,可以通过Lamda表达式创建该接口的对象。

例:

Arrays.sort(words, (first, second) -> Integer.Compare(first.length(), second.length()));


可以在任意函数式接口上标注@FunctionalInterface,这样编译器会检查该实体是否只包含一个抽象方法,并且javadoc页面也会包含一条声明

该注解不要求强制使用,但是会让代码更清楚


方法引用

当想要传递给其他代码的操作,已经有了实现的方法,则可以使用方法引用。可以理解为,针对传递既有方法时的,lamda表达式的简写


语法:

对象::实例方法

类::静态方法

类::实例方法


前两种情况中,方法引用等同于提供方法参数的lamda表达式

例:

Math::pow等同于(x, y) -> Math.pow(x, y);


第三种情况,第一个参数会成为执行方法的对象

例:

String::compareToIgnoreCase等同于(x, y) -> x.compareToIgnoreCase(y);


还可以捕获方法引用中的this/super参数

例:

this::equal 等价于x->this.equals(x)

Thread t = new Thread(super::toString);


构造器引用

构造器引用同方法引用类似,不同的是在构造器引用方法中方法名是new

对于拥有多个构造器的类,会根据上下文选择最合适的构造器

例:

List<String> labels = ..;

Stream<Button> stream = labels.stream().map(Button::new);

List<Button> buttons = stream.collect(Collectors.toList());

此处会调用Button(String)构造器


数组构造器引用可以解决”无法创造一个泛型数组“的问题

Button[] buttons = stream.toArray(Button[]::new);


变量作用域

lambda表达式可以捕获闭合作用域中的变量的值,这些变量称为自由变量。例如可以将lambda表达式转换为一个只含一个方法的对象,此时自由变量的值被复制到该对象的实例中

例:

public static void repeatMessage(String text, int count) {

Runnable r = () -> {

for(int i=0; i< count; i++) {

System.out.println(text);

}

};

new Thread(r).start();

}

在lambda表达式中被引用的变量不可更改,但是变量引用的值可以更改。这不是线程安全的,不建议这么做。

lambda表达式中不允许声明与一个局部变量同名的参数或局部变量


lambda表达式中this代表创建该lambda表达式的方法的this

例:

public class Application {

public void doWork() {

Runnable r = () -> {...; this.toString();}

}

}

此时调用Application的toString()


默认方法

Java SE 8 允许接口包含带有具体实现的方法(称为默认方法)

默认方法遵从以下两个规则:


1. 类优先:当父类中存在与接口中默认方法同名同参数的方法时,父类中的方法会起作用

例:

假设Person, Name中都存在getName()默认方法。

class Student extends Person implements  Named { ... }

此时只有父类方法起作用。类优先可以保证与Java7的兼容性


2. 当实现的两个接口中包含同名同参数的方法时, 编译器会报错,要求开发人员自行实现此方法。(可以在实现中选择调用其中一个接口的方法)

例:

假设Person, Name中都存在getName()默认方法。

解决冲突:

class Student implements Person, Named {

public String getName() { return Person.super.getName(); }

}


接口中的静态方法

Java 8中接口可以添加静态方法,这样就不比再为一个工具方法提供辅助类,并且可以灵活运用函数的强大。

例如List接口提供了一个排序方法,接收一个“键提取”函数

例:

首先,定义compareByNameThenAge方法定义比较的行为
public static int compareByNameThenAge(Human lhs, Human rhs) {
    if (lhs.name.equals(rhs.name)) {
        return lhs.age - rhs.age;
    } else {
        return lhs.name.compareTo(rhs.name);
    }
}
接着使用这个引用去调用humans.sort方法:
humans.sort(Human::compareByNameThenAge);





函数式接口和lambda表达式优雅的替换大量的if-else 函数式接口和lambda表达式优雅的替换大量的if-else,策略模式,工厂模式 阅读详情

相关推荐

农业AI避坑指南:用YOLO11做叶片病害检测时遇到的5个典型问题

本文分享了使用YOLO11模型进行农业叶片病害检测时常见的五个典型问题及解决方案。针对田间多变光照、病害样本不均衡、标注歧义、背景干扰和边缘部署等挑战,提供了包括场景自适应数据增强、解耦训练、软标签与鲁棒损失函数、困难负样本构建以及模型轻量化部署在内的实战经验,旨在帮助开发者提升农业AI项目的落地效果。

ujm56789012的博客 205

java SE 8新特性lambda表达式

目录 一、lambda表达式的简介 二、lambda表达式的语法 三、函数式接口 四、lambda表达式作用及运用 五、方法引用 六、构造器引用 七、变量的作用域 一、lambda表达式的简介 1、什么是lambda表达式? lambda表达式是一个可以传递的代码块,可以在将来执行一次或多次。使用lambda表达式的重点就是延迟执行。 2、什么时候可以用到lambda表达式?...

倾听者 700

从Transformer到Mamba:显著性检测领域的计算效率革命(Samba框架深度解析)

本文深入解析了Samba框架在显著性目标检测(Salient Object Detection)领域的创新应用,通过结合Mamba架构的优势,实现了计算效率的革命性提升。Samba框架采用显著性引导的Mamba模块(SGMB)和上下文感知上采样(CAU),有效解决了传统CNN和Transformer的局限性,同时在RGB-D等多模态任务中展现出卓越性能。

mmm90的博客 557

学习记录2

文章内容简要: 1、java8中接口方法的变化 2、Lambda表达式 3、函数式接口 1、java8中接口方法的变化 接口中方法默认使用public abstract修饰,字段默认使用public static final修饰; java8中可以定义default修饰的方法,也可以定义static修饰的方法 default修饰的方法,实现类可以重写,也可以不重写 static修饰的方法,实现类...

qq_36997245的博客 205

用化学方法nmp溶剂从佳能cmos传感器上剥离拜耳矩阵和微透镜

将光刻胶暴露于 NMP 溶剂中 10-15 分钟,并进行轻微的机械搅拌,将溶解的光刻胶从基材表面带走,即可去除大部分光刻胶,之后再进行第二次溶剂浴,以洗去微量含有光刻胶的溶剂。我还担心传感器的校准问题,我觉得可以大致解决这个问题,比如在安装面上用刻度尺标记三个螺丝的位置,然后数着拧出螺丝的圈数,直到听到“咔哒”声(螺纹完全拧出)。我还担心传感器的校准问题,我觉得可以大致解决这个问题,比如在安装面上用刻度尺标记三个螺丝的位置,然后数着拧出螺丝的圈数,直到听到“咔哒”声(螺纹完全拧出)。在我看来,这是必读的;

qq_40247880的博客 1473

Qt代码-软件商店

ui->statusBar->showMessage(QString("%1 已卸载").arg(app["name"].toString()));ui->statusBar->showMessage(QString("开始下载 %1...").arg(app["name"].toString()));QString("%1 已下载完成,是否立即安装?ui->statusBar->showMessage(QString("%1 下载完成").arg(app["name"].toString()));

寒寒豆豆软件公司的博客 110

Java 使用lambda表达式代替实现‘if else‘

本文主要介绍Java中,使用lambda表达式实现if else条件判断的方法代码。 原文地址:Java 使用lambda表达式代替实现'if else'

weixin_42098295的博客 3800

eNSP中玩转Python自动化——解锁网工新姿势(一)

Python自动化一、安装Paramiko模块二、搭建实验环境1、桥接电脑网卡2、配置交换机IP地址交换机配置测试ensp的交换机与电脑的连通性:交换机配置SSHXshell验证三、Python脚本1、执行python脚本2、同步成功 一、安装Paramiko模块 首先安装Python3 然后安装pip解释器 最后安装Paramiko模块 Windows+R打开Cmd,输入命令: pip3 install paramiko 进入python,导入 paramiko模块: import paramiko

LiBai'S BLOG 2万+

Java中Lambda表达式的使用

此笔记仅用作复习使用:https://www.cnblogs.com/franson-2016/p/5593080.html Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda表达式还增强了集合库。...

程序员的博客 6万+

SPICE仿真软件:HSPICE_(22).HSPICE仿真案例分析

通过上述案例分析,我们可以看到HSPICE仿真软件在不同电路类型和仿真场景中的应用。无论是简单的直流分析、交流分析还是复杂的暂态分析,HSPICE都能提供详细的仿真结果,帮助我们更好地理解和优化电路设计。希望这些案例能够为读者提供实用的参考和指导,进一步提升使用HSPICE进行电路仿真的能力。输入文件的编写:确保输入文件格式正确,使用注释来解释每一部分的内容。分析类型的选择:根据电路的特点选择合适的分析类型,如.DC.AC和.TRAN。输出结果的设置:使用.print命令来指定需要输出的节点电压和支路电流。

kkchenjj的博客 1305

2026年数学建模国赛论文排版规范:Word与LaTeX终极对比及模板

提前演练:不要等到比赛开始才第一次使用排版工具。至少在赛前一个月完成1-2篇模拟论文的全流程排版练习。建立检查清单:基于国赛规范制定排版检查清单,在提交前逐项核对——公式编号连续?图表引用准确?参考文献完整?页数不超限?善用模板但不止于模板:模板提供的是起点而非终点。根据自身需求调整宏包配置和样式参数,理解每一行配置的含义。关注评审体验:从评委的视角审视论文——重点内容是否突出?逻辑结构是否清晰?视觉层次是否合理?备份与容错:无论使用何种工具,建立多级备份机制。本地、云端、U盘各存一份,且定期保存历史版本。

YOLO 210

Java语法—— Lambda表达式

Lambda表达式

爱敲代码的三毛的博客 3万+

【Go语言实战】(2) Gin+Vue 电子商城

618来!!不用纠结去哪里剁手了!直接自己安排一个商场不香吗??

面向生活编程 4827

JAVA SE 反射,枚举与lambda表达式

JAVA SE 反射,枚举与lambda表达式

双吉堡工程专业的一名27届Javaer。 4048

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

JDK1.8之Lambda解析与表达式的使用

简介: Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda表达式还增强了集合库。 Java SE 8添加了2个对集合数据进行批量操作的包: java.util.function 包以及java.util.stream 包。 流(stream)就如同迭代器(iterator),但附加了许多额外的功能。 总的来说,

T 8360

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

【javaSE】 Lambda表达式与Lambda表达式的使用

Lambda表达式的优点很明显,在代码层次上来说,使代码变得非常的简洁。缺点也很明显,代码不易读。优点:代码简洁,开发迅速方便函数式编程非常容易进行并行计算Java 引入 Lambda,改善了集合操作缺点:代码可读性变差在非并行计算中,很多计算未必有传统的 for 性能要高不容易进行调试。

m0_71731682的博客 7391

Java 入门指南:Java 8 新特性 —— Lambda 表达式

Java Lambda 表达式是 Java 8 引入的一个功能,它允许以更简洁的方式编写函数式接口的实现。 Lambda 表达式可以被认为是一种匿名函数,它没有名称,但有参数列表、函数体和可能的异常列表。它可以用来替代使用匿名内部类实现函数式接口的方式 Lambda 表达式可以简化代码,使代码更加简洁、可读性更强,尤其在使用函数式接口和结合 Java Stream API 进行编程时非常有用。

热带鱼的技术博客 2146

java Lambda表达式详解

文章目录一、背景1.1语法二、使用步骤1.引入库2.读入数据总结 提示:以下是本篇文章正文内容,下面案例可供参考 一、背景 Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(Lambda expression)可以看作是一个匿名函数,基于数学中的λ演算得名,也可称为闭包(Closure) 。 换.

m0_57180439的博客 9280

【Java 8 in Action】Lambda表达式

文章目录Lambda表达式Lambda表达式的介绍Lambda表达式的语法Method ReferencesDefault methodsFunctional Interface浅析Lambda表达式的本质 Lambda表达式 Lambda表达式的介绍 Lambda表达式是在java规范提案JSR 335中定义的,Java 8 中引入了Lambda表达式,并被认为是Java 8最大的新特性,Lam...

明月沉江春雾晓 2376

Java8 Lambda 表达式有何用处?如何使用?

为什么80%的码农都做不了架构师?>>> ...

weixin_33957648的博客 3617

Java——Lambda表达式

Lambda表达式的优点很明显,在代码层次上来说,使代码变得非常的简洁。缺点也很明显,代码不易读。1. 代码简洁,开发迅速2. 方便函数式编程3. 非常容易进行并行计算4. Java 引入 Lambda,改善了集合操作1. 代码可读性变差2. 在非并行计算中,很多计算未必有传统的 for 性能要高3. 不容易进行调试。

Yuan_o_的博客 2936

JAVA8之lambda表达式详解

Lambda 表达式− Lambda允许把函数作为一个方法的参数(函数作为参数传递进方法中)Lambda表达式是JAVA8中提供的一种新的特性,它支持JAVA也能进行简...

哲洛不闹的专栏 5853

Java8语法糖之Lambda表达式

目录Lambda表达式什么是 Lambda表达式?语法例子 Lambda表达式 什么是 Lambda表达式? Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。 lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。 Lambda 表达式(Lambda expression)可以看作是一个匿名函数,一段可传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的代码,作为

qq_41552331的博客 670

一、java8的Lambda表达式

什么是Lambda表达式Lambda表达式是一段可以传递的代码。 λ表达式本质上是一个匿名方法。使用Lambda表达式可以使代码变的更加紧凑,例如在Java中实现一个线程,只输出一个字符串Hello World!,我们的代码如下所示: public static void main(String[] args) throws Exception { new Thread(new Runna

等风的帆 2392

java_Lambda表达式

lambda表达式:优点 :1、代码简洁,开发迅速2、方便函数式编程3、非常容易进行并行计算缺点:1、代码可读性变差2、在非并行计算中,很多计算未必有传统的for性能高3、不容易进行调试。

CxK6666667的博客 1298
上一篇: JAVA SE 8 学习笔记(二)Stream API
下一篇: JAVA SE 8 学习笔记(三)使用lambda编程
flycct
博客等级 码龄15年 10粉丝 17原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值