Java Lambda表达式学习笔记

Java8学习笔记(二)—— Lambda表达式 Java8学习笔记系列: Java8学习笔记(一)—— 函数式编程的四个基本接口 Java8学习笔记(二)—— Lambda表达式 Java8学习笔记(三)—— Optional类的使用 Java8学习笔记(四) —— Stream流式编程 Java8学习笔记(五)—— 方法引用(::双冒号操作符) 一、什么是Lambda表达式 Lambda是Java8的一个语法糖,... 阅读详情

一、Lambda表达式定义

Lambda 表达式是 JDK8 的一个新特性,可以取代大部分的匿名内部类,写出更优雅的 Java 代码,尤其在集合的遍历和其他集合操作中,可以极大地优化代码结构。

  • λ希腊字母表中排序第十一位的字母,英语名称为Lambda
  • 实质属于函数式编程的概念
  • 基本语法
    (params) -> expression [表达式]
    (params) -> statement [语句]
    (params) -> { statements }

例如:new Thread ( () -> System.out.println("I like lambda.") ).start();

二、为什么要使用Lambda表达式

  • 避免匿名内部类定义过多
  • 可以让你的代码看起来很简洁
  • 去掉了一堆没有意义的代码,只留下核心的逻辑

也许你会说,我看了Lambda表达式不但不觉得简洁,反而觉得更看不懂了。是因为我们还没有习惯,用的多看习惯了就好了。

三、使用Lamda表达式

理解Functional Interface (函数式接口)是学习Java8 lambda表达式的关键所在。

1. 函数式接口的定义

  • 任何接口,如果只包含唯一个抽象方法, 那么它就是一个函数式接口
public interface Runnable {
	public abstract void run();
}
  • 对于函数式接口,我们可以通过lambda表达式来创建该接口的对象

2. 推导Lambda表达式

/*
推导Lambda
 */

public class TestLambda {
    //3.或者使用静态内部类
    static class Like2 implements ILike {
        @Override
        public void lambda() {
            System.out.println("I like lambda.");
        }
    }

    public static void main(String[] args) {
        //4.局部内部类
        class Like3 implements ILike {
            @Override
            public void lambda() {
                System.out.println("I like lambda.");
            }
        }

        //5.匿名内部类
        ILike like4 = new ILike() {
            @Override
            public void lambda() {
                System.out.println("I like lambda.");
            }
        };

        ILike like = new Like();
        ILike like2 = new Like2();
        ILike like3 = new Like3();

        like.lambda();
        like2.lambda();
        like3.lambda();
        like4.lambda();

        //6.使用Lambda简化
        ILike like5  = () -> {
            System.out.println("I like Lambda.");
        };

        like5.lambda();
    }
}

//1.定义一个函数式接口
interface ILike {
    void lambda();
}

//2.实现类
class Like implements ILike {
    @Override
    public void lambda() {
        System.out.println("I like lambda.");
    }
}

3. 使用简化Lambda表达式

简化 Lambda 表达式的准则:

  • 如果可以推导出一个 lambda 表达式的参数类型,则可以忽略类型。
  • 如果方法只有一个参数,而且这个参数的类型可以推导,那么可以省略括号。
public class TestLambda2 {

    public static void main(String[] args) {

        ILove love = new ILove() {
            @Override
            public void lambda(String s) {
                System.out.println("I love " + s);
            }
        };

        //使用lambda简化
        ILove love2 = (String s) -> {
            System.out.println("I love " + s);
        };

        //简化参数类型, 因为可以类型推倒
        ILove love3 = (s) -> {
            System.out.println("I love " + s);
        };

        //简化参数括号
        ILove love4 = s -> {
            System.out.println("I love " + s);
        };
        ILove love5 = s -> {
            System.out.println("I love " + s);
            System.out.println("I love you");
        };

        //简化大括号
        ILove love6 = s -> System.out.println("I love " + s);
        IHave have = (s1, s2) -> System.out.println("I have " + s1 + " and " + s2);

        //总结:
        //使用lambda表达式前提为使用函数式接口
        //lambda表达式只能有一行代码的情况才能简化成一行,否则需要使用代码块包裹{}
        //多个参数可以去掉参数类型,多个参数不能去掉括号()

        love.lambda("lambda.");
        love2.lambda("lambda.");
        love3.lambda("lambda.");
        love4.lambda("lambda.");
        love5.lambda("lambda.");
        love6.lambda("lambda.");

        have.lambda("apple", "banana");

		new ILobe((s) -> { System.out.println("I love you");});
		new ILobe(s -> 
			System.out.println("I love you"));
    }
}

interface ILove {
    void lambda(String s);
}

interface IHave {
    void lambda(String s1, String s2);
}

4. 总结

  • 使用lambda表达式前提为使用函数式接口
  • lambda表达式只能有一行代码的情况才能简化成一行,否则需要使用代码块包裹 { }
  • 因为有类型推倒,可以去掉参数类型,多个参数不能去掉括号 ( )

在Android的按键就可以这么使用:

mButton.setOnClickListener((View v) -> {
    // do something here
});

学习视频参考:
https://www.bilibili.com/video/BV1V4411p7EF?p=10

Java学习笔记——lambda表达式 Lambda表达式在Java中的核心应用 摘要:Lambda表达式是Java 8引入的函数式编程特性,通过简洁语法(参数)->表达式实现匿名函数。它能替代匿名内部类,支持行为参数化,配合函数式接口(如Predicate、Function)使用。Lambda与Stream API结合可实现高效数据处理,其优势包括代码简洁、可读性强、并行友好和延迟执行。高级特性涵盖方法引用、类型推断和嵌套Lambda。典型应用场景包括集合操作、事件处理和构建流畅API。异常处理需特别关注,常见解决方案包括内部try-ca 阅读详情

相关推荐

Macbook Pro上如何修改brew源

一、需求说明 我的macbook电脑安装了中科大的brew源码,发现安装gpg工具失败,其他工具可以正常安装,为了能将gpg安装成功,就找了找切换brew源的方案,记录如下。 二、切换至国内源 由于使用github默认源有可能存在路径远或者部分服务访问超时的原因,切换至国内源可以提速。 2.1 替换brew.git $ cd "$(brew --repo)" # 中国科大: $ git remote set-url origin https://mirrors.ustc.edu.cn/brew.git #

bufegar0的博客 1079

Lambda完整学习指南

Lambda表达式是Java SE 8中一个重要的新特性。lambda表达式允许你通过表达式来代替功能接口。lambda表达式就和方法一样,它提供了一个正常的参数列表和一个使用这些参数的主体(body,可以是一个表达式或一个代码块)。Lambda表达式还增强了集合库。Java Lambda表达式的一个重要用法是简化某些匿名内部类(Anonymous Classes)的写法。实际上Lambda表达式并不仅仅是匿名内部类的语法糖,JVM内部是通过invokedynamic指令来实现Lambda表达式的。

z_ssyy的博客 3472

BraTS数据集保姆级使用指南:从下载、预处理到可视化(附Python脚本)

本文提供BraTS数据集的完整使用指南,涵盖从下载、预处理到可视化的全流程,并附有Python脚本示例。详细解析了医学影像处理中的数据结构、标准化流程和可视化技巧,帮助初学者快速掌握BraTS数据集的应用方法,提升医学影像分析效率。

weixin_27310417的博客 463

Lambda表达式超详细总结(简单易懂)

Lambda表达式超详细总结

Qgchun. 3731

ACC自适应巡航功能

自适应巡航功能(Adaptive Cruise Control)通过传感器检测车辆前方形式环境,控制自车行驶速度以达到定速巡航、跟车巡航、跟车启停,并支持超车辅助等功能。1. 定速巡航一般可设置车辆在30~150km/h的定速范围内巡航2. 跟车巡航车速0~150km/h范围内的跟车巡航3. 跟车启停30s内:自车随之起步,驾驶员无需操作30s~600s内:驾驶员按钮激活 或 轻踩加速踏板激活起步600s后:ACC退出激活状态进入待激活状态,电子驻车制动EPB会自动启动4. 超车辅助。

LXY_LXY_的博客 1385

直升机空气动力学基础--005翼型的升阻比和气动力矩

焦点与翼型有关,总升力矩可以视为附加升力与零升力迎角升力的合成,对于对称翼型,零升力力矩为0,附加升力就是总升力,其焦点就是其压力中心。对于对称翼型,零升力力矩为0,对于非对称翼型,零升力力矩存在,与不对称度成正比。对于不对称翼型,升力对焦点的力矩保持不变。

ygf666的博客 4133

别翻了,Lambda 表达式入门,看这篇就够了

说出来怕你们不相信,刚接到物业通知,疫情防控升级了,车辆只能出不能进,每户家庭每天可指派 1 名成员上街采购生活用品。这不是谣言,截个图自证清白,出自洛阳市湖北路街道处。 看来事态严峻,这样看似好心,但不一定办好事,去超时抢购的人会更多。不管了,只能窝在家做持久战了。趁这段时间,多分享一些原创文章给你们——有眼福了呀,多储备点知识,疫情结束后肯定能派上大用场。今天分享的主题是《Lambda 表达...

沉默王二 1万+

让 RAP 弹窗参数真正变成必填:Excel Upload Action 的两种实现路径

摘要 在RAP应用中,action弹窗参数经常缺乏必填校验,导致用户体验差。本文提出两种解决方案:1)在action实现中手动校验,简单但交互不流畅;2)通过root abstract entity和abstract BDEF建模,利用field(mandatory)实现框架级校验,推荐此长期方案。后者将约束集中到模型层,使UI与执行期校验一致,特别适合ABAP Cloud环境。以Excel导入为例,强制填写备注和明确选择试运行,可避免审计问题,提升系统可靠性。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 199

Java8新特性(一) Lambda 表达式

目录: 1、为什么使用 Lambda  表达式? 2、Lambda  表达式语法 3、类型推断 4、实例 4.1、入门案例 4.2、替代匿名内部类 4.3、使用lambda表达式对集合进行迭代 4.4、用lambda表达式实现map 4.5、用lambda表达式实现map与reduce 4.6、filter操作 4.7、与函数式接口Predicate配合 Java 8 (又...

myroncham的博客 474

【数据集】中国大气污染物数据集CHAP(1km空间分辨率)-韦晶团队

中国大气污染物数据集CHAP(1km空间分辨率)-韦晶团队

WW、forever的博客 2599

【Halcon-1D测量】measure_pairs 函数功能(用于提取垂直于矩形/环形弧主轴的直边对)

HALCON算子measure_pairs是1D测量模块的基础工具,专用于提取垂直于矩形/环形弧主轴的直边对。该算子通过振幅阈值和灰度过渡规则(如positive/negative)进行边对分组,支持_strongest后缀选择最强边缘避免误配对。输出包含边缘坐标、振幅及内外间距(IntraDistance/InterDistance)。关键限制包括仅适用于直边、Sigma需≤0.5×测量长度,且忽略图像域。相比模糊版本算子,它更适用于边缘清晰的简单场景(如电子元件间距测量)。典型应用需配合gen_meas

weixin_45590420的博客 305

Java学习——lambda表达式

lambda表达式

qq_45944185的博客 1万+

基于Simulink的占空比调制DTC降低转矩脉动

修改传统SVPWM模块,输入占空比d和有效矢量索引,计算Ton​=d∗Tc​、Toff​=(1−d)∗Tc​,生成对称PWM波形(替代开关表直接输出)。:低速时(n<500rpm)减小dmax​=0.6(避免磁链畸变),高速时(n>2000rpm)增大dmax​=0.8(提升动态响应);kT​/kψ​:转矩/磁链误差增益(需整定,如kT​=0.02/(N⋅m),kψ​=0.1/Wb);(θ为电压矢量与磁链夹角)。② SVM-DTC(占空比计算模块启用,d0​=0.5,kT​=0.02,kψ​=0.1)。

amy_mhd的博客 87

java8 lambda python_【学习笔记】java8 Lambda表达式语法及应用

本文是慕课网大牧莫邪老师的视频教程一课掌握Lambda表达式语法及应用的学习笔记。如果觉得内容对你有用,可以购买老师的课程支持一下,课程价格1元,十分良心了。1. 课程介绍2. 为什么引入Lambda表达式2.1 什么是Lambda表达式Lambda表达式也称箭头函数、匿名函数、闭包Lambda表达式体现的是轻量级函数式编程思想-> 符号是Lambda表达式核心操作符号,符号左侧是操作参数,...

weixin_39612677的博客 268

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

java8学习笔记-Lambda表达式

Lambda 表达式是一个匿名函数(指的是没有函数名的函数),直接对应于其中的 Lambda 抽象,Lambda 表达式可以表示闭包。我们可以把 Lambda 表达式理解为是一段可以传递的代码(将代码作为实参),也可以理解为函数式编程,将一个函数作为参数进行传递。可以直接引用Java类或对象的方法,它可以被看成是一种更加简介易懂的Lambda表达式,使用方法引用后,代码可以更加简洁的编写。可以看到 (Global a, Global b) 可以省略Global 类型变成 (a, b)

nimqbiyq的博客 390

STM32F407中文手册

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

java202303java学习笔记第三十天lambda表达式3

java

qq_41632427的博客 114

迈瑞BS系列全自动生化分析仪LIS协议接口手册(内含HL7和ASTM)

迈瑞BS系列全自动生化分析仪LIS协议接口手册,内含HL7和ASTM)

Java学习笔记一Lambda表达式

Lambda表达式支持将代码块作为方法参数,Lambda允许使用更简洁的代码来创建只有一个抽象方法的接口(称为函数式接口)的实例。 三部分:形参列表允许省略形参类型,如果形参列表中只有一个参数,甚至连形参列表的圆括号也可省略。箭头,必须通过英文中画线和大于符号组成。代码块,只包含一条语句的话,允许省略代码块的花括号。只有一条return语句,可省略return关键字。 public class C...

肥叔菌的博客 9006

JAVA学习笔记——Lambda 表达式

目录引入表达式语法函数式接口方法引用和构造器引用方法引用构造器引用变量作用域处理 lambda 表达式 引入 Lambda表达式是一个可传递的代码块,可以在以后执行一次或多次。在 Java 中传递一个代码段并不容易,不能直接传递代码段。Java 是一种面向对象语言,所以必须构造一个对象,这个对象的类需要有一个方法能包含所需的代码。 在其他语言中,可以直接处理代码块。Java 设计者很长时间以来一直拒绝增加这个特性。毕竟,Java 的强大之处就在于其简单性和一致性。如果只要一个特性能够让代码稍简洁一些,就把这

weixin_43410001的博客 595

Java学习笔记之 Lambda表达式

Java Lambda表达式1、Lambda表达式参考 1、Lambda表达式 参考 1、Java 8 Lambda 表达式详解 2、java8(二)lambda表达式手把手学习 3、Java SE8 之 Lambda 表达式详解

JMW1407的博客 557

Java学习笔记:Lambda表达式

这篇文章是对自己学习的一个总结,学习资料是疯狂Java讲义第三版,李刚编,电子工业出版社出版。 1、Lambda表达式入门2、Lambda表达式的各种写法2.1、省略方法中形参的类型3、Lambda表达式与函数式接口3.1、引用类方法3.2、引用特定对象的实例方法3.3、引用某类对象的实例方法3.4、引用构造器 1、Lambda表达式入门 学习Lambda之前,要先了解匿名内部类。相关知识可以看这篇文章。 https://blog.youkuaiyun.com/sinat_38393872/article/deta

sinat_38393872的博客 372

Java Lambda 表达式学习笔记

Java Lambda 表达式学习笔记 Java Lambda 表达式是 Java 8 引入的一个新的功能,可以说是模拟函数式编程的一个语法糖,类似于 Javascript 中的闭包,但又有些不同,主要目的是提供一个函数化的语法来简化我们的编码。 Lambda 基本语法 Lambda 的基本结构为(arguments) -> body,有如下几种情况: 参数类型可推导时,不需要指定...

一叶知春秋 673

Java学习笔记-Lambda表达式

Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用简洁的代码来创建只有一个抽象方法的接口(这种接口被称为函数是接口)的实例 意义 自从Java 8开始,Java支持Lambda表达式 当使用Lambda表达式代替匿名内部类创建对象时,Lambda表达式的代码块将会代替实现抽象方法的方法体,Lambda表达式就相当于一个匿名内部类 Lambda表达式的构成: 形参列表。形参...

cj5785 2115

Java的Lambda表达式学习笔记:使用lambda表达式

Java中Lambda表达式的基本使用

u011998957的博客 2019

Java lambda表达式学习笔记

第一个lambda表达式 先来看一段根据字符串长度排序的Test.java package com.xzc; import java.util.Arrays; import java.util.Comparator; public class Test { public static void main(String[] args) { String[] s1 ={"ab","a","abcd","abc"}; Arrays.sort(s1, new Compar

AHawkeye的博客 432
上一篇: Android网络 Retrofit简易用法
下一篇: Java多线程 基础学习笔记/静态代理模式
3Blue1Red
博客等级 码龄7年 7粉丝 38原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值