Java8 新特性 Lambda 表达式学习心得

Java8新特性之Lambda表达式 Lambda目录前言一、Lambda表达式有哪些语法?1.1.语法一(无参数,无返回值)1.2.语法二(有一个参数,并且无返回值)1.3.语法三(有两个以上的参数,有返回值,并且 Lambda 体中有多条语句)1.4.语法四(若 Lambda 体中只有一条语句, return 和 大括号都可以省略不写)1.5.语法五( Lambda 表达式的参数列表的数据类型可以省略不写,因为JVM编译器通过上下文推断出,数据类型,即“类型推断”)二、Lambda表达式结构?三、函数式接口3.1.在函数式接口上使用lamb 阅读详情

一.何为Lambda表达式

   1.1Lambda表达式作用

     Lambda表达式是java8的重要更新,它支持将代码块作为方法参数,Lambda表达式允许用更简介的代码来创建一个函数式接口(只有一个抽象方法的接口)的实例。

     1.2Lambda表达式语法

         (arg1,arg2...)->{}

        第一部分:形参列表。形参列表允许忽略形参类型,如果只有一个参数,圆括号也可以省略。

        第二部分: -> 由英文的划线和大于号组成

        第三部分: 代码块。Lambda表达式只有一条return语句可以省略return关键字,代码块只有一行可以省略花括弧,

      1.3Lambda表达式的各种简化写法

          先看以下实例代码:

interface Foot {
	void walk();
}

interface Arm {
	void wave(String name);
}

interface Maths {
	int add(int a, int b);
}

public class SimpleLambda {
	// 调用该方法需要Foot对象
	public void walk(Foot e) {
		System.out.println(e);
		e.walk();
	}

	// 调用该方法需要Arm对象
	public void wave(Arm f){
		f.wave("主席");
	}

	// 调用该方法需要Math对象
	public void test(Maths add) {
		System.out.println("5与3的和为:" + add.add(5, 3));
	}

	public static void main(String[] args) {
		SimpleLambda sl;
		sl= new SimpleLambda ();
		// Lambda表达式的代码块只有一条语句,可以省略花括号。
		sl.walk(() -> System.out.println("正在走路"));// 1
		// Lambda表达式的形参列表只有一个形参,省略圆括号
		sl.wave(weather -> //2
		{
			System.out.println("握手对象是:" + weather);
		});
		// Lambda表达式的代码块只有一条语句,省略花括号
		// 代码块中只有一条语句,即使该表达式需要返回值,也可以省略return关键字。
		sl.test((a, b) -> a + b);//3
	}
}
      上述代码中

       1 代码处使用Lambda表达式相当于不带形参的匿名方法,表达式只有一行,可以省略花括号。

       2代码处使用Lambda表达式相当于一个形参的匿名方法,形参只有一个,可以省略圆括号。

       3代码处使用Lambda表达式只有一行,省略return 关键字,并将这行语句当作返回值

  二.函数式接口与Lambda表达式

      2.1何为函数式接口

       函数式接口:只包含一个抽象方法的接口,但是函数式接口可以包含多个默认方法,类方法。(java8中接口支持建立默认方法,和类方法)

     2.2Lambda表达式的限制

        Lambda表达式的目标类型必须明确是函数式接口。

       由于Lambda表达式只能实现一个方法,所以lambda表达式只能为函数式接口创建对象。


     2.3确保Lambda表达式的目标类型是函数式接口的常用方法     

        将Lambda表达式当作函数式接口类型的参数传给方法 .

        使用函数式接口类型对Lambda表达式进行强转.

        将Lambda表达式赋给函数式接口类型的变量.

三.Lambda表达式方法引用和构造器引用

    3.1引用类方法

        Lambda表达式:(a,b...)->类名.类方法(a,b...)

        简化:类名::类方法

        说明:函数式接口被实现方法的全部参数传递给该方法.

    3.2引用特定对象的实例方法

        Lambda表达式:(a,b...)->对象.实例方法(a,b...)

        简化:对象::实例方法

        说明:函数式接口被实现方法的全部参数传递给该方法.

    3.3引用某类对象的实例方法

        Lambda表达式:(a,b,c...)->a.实例方法(b,c...)

        说明:a参数作为调用者,a参数之后全部参数传递给该方法作为参数

    3.4引用构造器

        Lambda表达式:(a,b...)->new 类名(a,b...)

        简化:类名::new

        说明:函数式接口被实现方法的全部参数传递给构造器

    3.5实例代码

import javax.swing.*;

public class LambdaMethod{
	public static void main(String[] args){
		//1引用类方法
		//常规lambda表达式
		Test1 test11= from->Integer.valueOf(from);
		//引用类方法的简化方式  类名::类方法
		//函数式接口中被实现方法的全部参数传给该方法作为参数
		Test1 test12=Integer::valueOf;
		Integer val=test11.convert("99");
		Integer val2=test12.convert("88");
		System.out.println("传统lambda表达式:"+val);
		System.out.println("简化lambda表达式(类名.类方法):"+val2);
		//2引用特定对象的实例方法
		//常规lambda表达式
		Test1 test13=from -> "lambda表达式测试".indexOf(from);
		Integer value=test13.convert("表达式");
		System.out.println(value);
		//引用特定对象的实例方法的简化方式  特定实例::实例方法
		//函数式接口中被实现方法的全部参数传给该方法作为参数
		Test1 test14="lambda表达式测试"::indexOf;
		Integer value2=test14.convert("表达式");
		System.out.println(value);
		//3引用某类对象的实例方法
		//常规lambda表达式 创建接口对象
		Test2 test21=(a,b,c)->a.replaceAll(b, c);
		String result=test21.test("lambda表达式测试","测试","检验");
		System.out.println(result);
		//方法引用代替lambda表达式:引用对象的实例方法
		//函数式接口被实现方法的第一个参数作为调用者
		//后面参数作为全部参数传递给该方法作为参数;
		Test2 test22=String::replaceAll;
		String result2=test22.test("引用对象的实例方法lambda表达式简化:","测试","检验"<span style="color:#008000;"></span>);
		System.out.println(result2);
		//4引用构造器
		//普通lambda表达式作为对象
		Test3 test31=(String title)->new JFrame(title);
		JFrame jf=test31.win("我的窗口");
		System.out.println(jf);
		//构造器代替lambda表达式
		//函数式接口被实现方法的第一个参数作为调用者
		Test3 test32=JFrame::new;
		JFrame jf2=test31.win("我的窗口2");
		System.out.println(jf2);
	}

}
@FunctionalInterface
interface Test1{
	Integer convert(String from);
}
@FunctionalInterface
interface  Test2{
	String test(String a ,String b, String c);
}
@FunctionalInterface
interface  Test3{
	JFrame win(String title);
}

四.Lambda表达式与匿名内部类

   4.1相同点

       Lambda表达式是匿名内部类的一种简化,可以部分取代匿名内部类的作用

       Lambda表达式和匿名内部类异样,可以访问final局部变量,以及外部的成员变量

       Lambda表达式创建的对象和匿名内部类生成的对象一样,都可以调用从接口中继承的default方法.

    4.2不同点

       匿名内部类可以为任意接口创建实例(不管接口有多少抽象方法,只需实现所有抽象方法),匿名内部类可以为任意抽象类创建实例,Lambda表达式只能为函数式接口创建实例

       匿名内部类实现的抽象方法中允许调用接口中定义的default方法,但是Lambda表达式的代码块不允许调用接口中定义的default方法


五.总结

       Lambda表达式就是使用简洁的语法来创建函数式接口的实例----这种语法可以节省匿名内部类创建的繁琐语法.

【Java8 新特性 1】java8 lambda表达式 Java8发布已经有一段时间了,这次发布的改动比较大,很多人将这次改动与Java5的升级相提并论。Java8其中一个很重要的新特性就是lambda表达式,允许我们将行为传到函数中。想想看,在Java8之前我们想要将行为传入函数,仅有的选择就是匿名内部类。Java8发布以后,lambda表达式将大量替代匿名内部类的使用,简化代码的同时,更突出了原来匿名内部类中最重要的那部分包含真正逻辑的代码。尤其是对于做数据的同学来说,当习惯使用类似scala之类的函数式编程语言以后,体会将更加深刻。现在我们就来看看J... 阅读详情

相关推荐

【Java8 新特性 2】java8 lambda表达式进阶

一、函数式接口简介 函数式接口是 Java8 引入的一个新特性,是一种特殊的接口:SAM类型的接口(Single Abstract Method),但本质上还是接口。相比较于其他接口,函数式接口有且只能有一个抽象方法。只要接口中出现多个抽象方法,那么就不能称之为函数式接口,运行的时候就会报错。为此 Java8 提供了一个新的注解@FunctionalInterface,如果接口被这个注解标注,就说明该接口是函数式接口,如果有多于一个的抽象方法,在编译的时候就会报错。但是这个注解不是必需的,只要接口符合函数

学Java,找哪吒 1万+

(JAVA8新特性) -> (lambda表达式学习心得【学习日记】)

2019.4.17 提炼出了对自己有用的东西,记录了学习过程便于复习。不过例子都来自于参考文章,链接已经在文中贴出。 1. 学习了lamda表达式,简单粗暴的语法糖,被它的功能强大所震撼。 ①基础的用法比如匿名函数 //1. 接受2个参数(数字),并返回他们的差值 (x, y) -> x – y //2. 接收2个int型整数,返回他们的和 (int x, int y) -&...

m0_37860933的博客 670

OPTI Toolbox v2.28 安装与 3 个求解器补全:SCIP、SeDuMi、MOSEK 配置详解

本文详细介绍了OPTI Toolbox v2.28在MATLAB环境下的完整安装指南,包括SCIP、SeDuMi和MOSEK三个关键求解器的配置与优化技巧。通过分步指导和实战案例,帮助用户高效搭建强大的优化工具包,提升混合整数规划、二次约束二次规划等复杂问题的求解效率。

weixin_29039773的博客 350

Java8新特性(一)-Lambda表达式

一,Java8新特性简介 1,速度更快 2,代码更少(增加了新的语法Lambda表达式) 3,强大的Stream API 4,便于并行 5,最大化减少空指针异常Optional   二,Lambda表达式 1,为什么使用Lambda表达式  Lambda 是一个匿名函数,我们可以把 Lambda表达式理解为是一段可以传递的代码(将代码像数据一样进行传递)。可以写出更简洁、更灵活的...

空默寒的博客-学习和积累 2万+

2025统计建模大赛完整论文

参赛队号:(参赛队无须填写,参赛队号由大赛官网自动生成)2025年(第十一届)全国大学生统计建模大赛参 赛 作 品参赛学校:XXXXXX大学论文题目:海洋叶绿素含量影响因素与预测——基于机器学习与大数据分析预测参赛队员:指导老师:国家知识产权局 统计分析成果 知识产权统计数据公开查询指引(2024版)随着全球气候变化的加剧,海洋碳汇的作用愈发受到重视,尤其是海洋生物通过光合作用吸收二氧化碳的过程,对于全球碳循环和温室气体减排具有重要意义。

2301_79579117的博客 9318

人形机器人解耦驱动腿部设计与FAST性能优化

机器人运动控制的核心在于动力学解耦与能量效率优化。通过多连杆机构设计,可以实现关节运动的独立控制,显著降低惯性叠加和能量损耗。DecARt Leg采用创新的齿轮-四杆复合机构,将腿部伸缩与摆动运动完全解耦,配合多杆踝关节传动系统,实测行走速度可达4.18m/s。这种解耦设计不仅提升了动态性能,其提出的FAST指标更为腿部构型提供了量化评估基准,在仓储物流、地形适应等场景展现出显著优势,为人形机器人运动控制提供了新的技术路径。

weixin_33759613的博客 238

Java8新特性——Lambda表达式

Java8新特性——Lambda表达式 Java8新特性 Java8新特性(又称为 jdk1.8)是Java语言开发的一个主要版本。Oracle公司于2014年3月18日发布Java8,它支持函数式编程,新的JavaScript引擎,新的日期API,新的Stream API等。——摘自菜鸟教程 Java8 新增特性 Lambda 表达式 − Lambda 允许把函数作为一个方法的参数(函数作为参数传递到方法中)。 方法引用 − 方法引用提供了非常有用的语法,可以直接引用已有 Java 类或对象(实

qq_50994235的博客 3535

机械革命重装Win11详细教程

通过以上步骤,你可以在机械革命电脑上成功重装Windows 11。虽然整个过程可能看起来有些复杂,但只要你按照步骤逐一进行,就能够顺利完成安装并享受到全新的操作系统带来的便利和性能提升。希望本文能够帮助到你,如果你有任何问题或疑问,请随时联系我们的技术支持团队。

mmoo_python的博客 3130

Java8新特性-Lambda表达式

简介 Lambda表达式(也称闭包),是Java8中最受期待和欢迎的新特性之一。在Java语法层面Lambda表达式允许函数作为一个方法的参数(函数作为参数传递到方法中),或者把代码看成数据。Lambda表达式可以简化函数式接口的使用。函数式接口就是一个只具有一个抽象方法的普通接口,像这样的接口就可以使用Lambda表达式来简化代码的编写。 使用Lambda表达式的前提 对应接口有且只有一个抽象方...

ThinkWon的博客 1万+

OpenWrt南京电信PPPoE IPv6配置:从零搭建稳定双栈网络

本文详细指导如何在南京电信PPPoE宽带环境下,为OpenWrt路由器配置稳定的IPv6双栈网络。核心在于正确设置WAN6接口为DHCPv6客户端,并请求/60前缀,同时配置LAN口分发地址并放行防火墙关键流量,确保内网设备获得原生IPv6连接。

water的专栏 1339

机器人动力学与控制学习笔记(一)————机器人控制概述

一、概述 1、机器人控制的目的 对自由运动机器人来说,控制的目的是要控制机器人手端的位置和姿态(以后统一简称为位姿),即所谓位置控制问题。这时希望机器人手端所达到的位置称为期望位置或期望轨迹。期望轨迹可以在机器人任务空间中给出,也可以通过逆运动学关系转化为机器人关节空间中的期望轨迹。期望轨迹通常有两种形式:一种是一个固定位置(即固定点),另一种是一条随时间连续变化的轨迹。自由运动机器人位置控制的目的,是要使机器人手端从任意起始位置出发都能到达期望轨迹。当期望轨迹是固定点时的位置控制称为定...

冰与火的青春的博客 6879

java8新特性之lambda表达式

java8新特性之lambda表达式

qq_65244706的博客 1601

Upwork入门指南:如何创建吸引人的个人资料

本文详细介绍了如何在Upwork上创建并优化个人资料,帮助自由职业者吸引更多客户。内容包括: 注册与验证:从注册账号到邮箱验证的完整步骤。 个人资料填写:如何撰写吸引人的标题、简介,选择技能标签,以及设置专业头像和费率。 作品集与优化:上传高质量作品集,提升搜索排名和客户信任度。 常见问题解答:解决新手常见问题,如无工作经验或审核不通过。 通过本文的指导,你将学会打造一个专业且高效的个人资料,为在Upwork上获得更多机会奠定基础。

qq_61813593的博客 3514

Java8新特性之Lambda 表达式详解

文章目录1、什么是Lambda 表达式2、Lambda 表达式语法3、Lambda 表达式入门案例4、Lambda 表达式的使用 1、什么是Lambda 表达式 Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。 在 Java 语言中,可以为变量赋予一个值。 int a=130; String s="hello world"; Boolean flag=a.startWith("h");

zhouhengzhe的博客 4538

【华为OD机试真题】2、在字符串中找出连续最长的数字串含+-号 | 机试真题+思路参考+代码解析(C++、Java、Py)

题目描述 >请在一个字符串中找出连续最长的数字串,并返回这个数字串。 如果存在长度相同的连续数字串,返回最后一个。 如果没有符合条件的字符串,返回空字符串””。   注意: 数字串可以由数字”0-9″、小数点”.”、正负号”±”组成,长度包括组成数字串的所有符号。 “.”、“±”仅能出现一次,”.”的两边必须是数字,”±”仅能出现在开头且其后必须要有数字。 长度不定,可能含有空格

KJ.JK 6272

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Java 8 新特性——Lambda表达式

Lambda 表达式一篇即可完全掌握,详细的语法说明,各种使用场景介绍,并结合集合示例讲解。

wenqi1992的博客 3907

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

JAVA8新特性一:lambda表达式

大家好,最近入职了新的公司,所以很久都没有写新博客了(其实就是懒) 新公司大量的使用了一些JAVA8的新特性,所以也恶补了一下JAVA8的知识(好吧我知道JAVA14都出来了我还在写JAVA8的特性确实有点落伍了)但最近看了一下实战系列的JAVA8实战,感觉很受启发,作者的高度带给了我不一样的角度来看这些特性。 新特性一:Lambda表达式 Lambda表达式概述 首先让我们来康康JAVA8最大的...

B君的军火库 2217

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

【Java8新特性】- Lambda表达式

Lambda 表达式(lambda expression)是一个匿名函数,Lambda表达式基于数学中的λ演算得名,直接对应于其中的lambda抽象(lambda abstraction),是一个匿名函数,即没有函数名的函数。Lambda表达式可以表示闭包(注意和数学传统意义上的不同)。

qq_43843951的博客 21万+

Java 8常用新特性Lambda表达式与Stream API使用实例

Java8 新增了很多特性,本文主要介绍使用: Lambda 表达式 − Lambda允许把函数作为一个方法的参数。 Stream API −新添加的Stream API(java.util.stream) 函数式编程风格的引入。 更多的新特性可以参阅官网:What’s New in JDK 8 前置准备 创建一个测试类 /** * @author 码农猿 */ public class ...

程序员小强的博客 6824

Java 8 新特性—Lambda 表达式

Lambda 表达式是在 Java 8 中引入,并且被吹捧为 Java 8 最大的特性。它是函数式编程的的一个重要特性,标志着 Java 向函数式编程迈出了重要的第一步。或者其中parameters:是 Lambda表达式的参数列表,可以为空或包含一个或多个参数。->:是 Lambda 操作符,用于将参数和 Lambda 主体分开。expression:是 Lambda 表达式的返回值,或者在主体中执行的单一表达式。

smart_an的专栏 1142

Java 8新特性之--Lambda表达式详细讲解

换句话说,方法引用就是Lambda表达式,也就是函数式接口的一个实例,通过方法的名字来指向一个方法,可以认为是Lambda表达式的一个语法糖。如果我们开发中需要定义一个函数式接口,首先看看在已有的jdk提供的函数式接口是否提供了能满足需求的函数式接口。当函数式接口方法的第一个参数是需要引用方法的调用者,并且第二个参数是需要引用方法的参数(或无参数)时:ClassName::methodName(针对于3)如果给函数式接口提供实例,恰好满足方法引用的使用情境,就可以考虑使用方法引用给函数式接口提供实例。

业精于勤,荒于嬉 2171

Java 8 新特性: Lambda 表达式

我们可以自定义一个函数式接口,并使用 Lambda 表达式来实现它。lambdaInterfaceDemo(() -> System.out.println("自定义函数式接口"));// 函数式接口参数i.f();

qq_33326733的博客 1155

java8新特性lambda表达式

  lambda表达式是java8新增的一个语法元素,也是java8最重要新特性,增加lambda新特性是java语言持续保持活力和创新性的必然要求,因为lambda表达式是近几年计算机语言设计的重点关注领域,包括随spark而火起来的scala语言,也就是以对lambda表达式支持而备受欢迎。可以说lambda表达式是继java5提供泛型编程后,又一次重塑和飞跃。java实现的lambda表达式...

zhaojianting的博客 1万+

Java 8 Lambda 表达式

本文介绍了 Lambda 表达式以及方法引用这 Java 8 的两大亮点,赶紧学习起来吧!

我与风来 3034

JAVA8的新特性——lambda表达式

此处,我们首先对于Java8的一些特性作为一个简单介绍Java 8是Java编程语言的一个重要版本,于2014年发布。Java 8引入了许多新特性和改进,以提高开发效率和性能。以下是Java 8的一些主要新特性:Lambda表达式:Lambda表达式是一种简化Java代码的语法结构,允许在一行代码中定义简单的函数。它可以用于方法引用、构造函数引用和接口实现等场景。Lambda表达式使得编写简洁、高效的代码变得更加容易。Stream API:Stream API是一组用于处理集合数据的新方法。

IT小辉同学 932
上一篇: Java通过poi读取word,excel,ppt文件中文本(excel,ppt部分)
RedKnife_
博客等级 码龄11年 0粉丝 4原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值