【多线程】-- 05 Lambda表达式

多线程

4 Lambda表达式

  • λ是希腊字母表中排序第十一位的字母,英语名称为Lambda
  • 是为了避免匿名内部类定义过多
  • 实质属于函数式编程的概念

为什么要使用Lambda表达式?

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

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

函数式接口的定义:

  • 任何接口,如果只包含唯一一个抽象方法,那么它就是一个函数式接口。

  • public interface Runnable {public abstract void run(); //接口中定义的方法默认隐式声明为抽象方法,故可以省略abstract
    }
    
  • 对于函数式接口,可以通过Lambda表达式来创建该接口的对象

下面将用代码演示Lambda表达式的推导:

package com.duo.lambda;//演示:推导Lambda表达式
public class LambdaTest1 {//3.静态内部类static class Like2 implements ILike {@Overridepublic void lambda() {System.out.println("2: I like lambda");}}public static void main(String[] args) {ILike like = new Like();  //ILike:向上转型like.lambda();Like2 like2 = new Like2();like2.lambda();//4.局部内部类class Like3 implements ILike {@Overridepublic void lambda() {System.out.println("3: I like lambda");}}Like3 like3 = new Like3();like3.lambda();//5.匿名内部类:没有类的名称,必须借助接口或者父类like = new ILike() {@Overridepublic void lambda() {System.out.println("4: I like lambda");}};like.lambda();//6.用Lambda表达式简化like = () -> {System.out.println("5: I like lambda");};like.lambda();}}//1.先定义一个函数式接口
interface ILike {void lambda();
}//2.实现接口类
class Like implements ILike {@Overridepublic void lambda() {System.out.println("1: I like lambda");}
}

运行结果:

图1

带有参数的Lambda表达式:

package com.duo.lambda;public class LambdaTest2 {public static void main(String[] args) {//Lambda表达式写法的简化ILove love = (int a) -> {System.out.println("1: I love you -> " + a);};love.lambda(2);}
}interface ILove {void lambda(int a);
}

运行结果:

图2

此外,Lambda表达式还有一些更简化的写法,但用法比较受限,具体总结如下:

  • Lambda表达式的代码体中,在只有一行代码的情况下,才能将整个Lambda表达式简化为一行;如果代码体有多行,就需要以代码块包裹
  • 使用Lambda表达式前提:接口为函数式接口
  • 当接口中的方法为多个参数时,Lambda表达式也可以去掉参数类型的声明

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/225910.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

GOAT:多模态、终身学习、平台无关的机器人通用导航系统

机器人应用中涉及到的核心技术包括:环境感知与理解、实时定位与建图、路径规划、行为控制等。GOAT通过多模态结合终生学习的方式让你的机器人可以在未知环境中搜索和导航到任何物体。小白也可以零门槛上手。 项目地址:https://theophilegervet.github.i…

centos服务器扩容

centos服务器扩容 我的情况是,原服务器是一个80g磁盘,管理员又追加了120G到这块磁盘上,需要把这120G重新追加使用。 请确认你遇到的情况是否和我初始截图一致,再往下看,免得浪费时间与精力 服务器中有120G尚未使用&…

数据治理框架和成熟度模型

数据治理成熟度模型 一个企业的数据治理能力越高,所享受到数据治理带来的价值也会越多,如增加收入、减少成本、降低风险等。于是,很多企业想要准确地评估本公司的数据治理能力,可以利用数据治理成熟度模型方法,包括 D…

fastjson和jackson序列化的使用案例

简单记录一下一个fastjson框架和jackson进行序列化的使用案例: 原json字符串: “{“lockCount”:”{1:790,113:1,2:0,211:0,101:1328,118:8,137:0,301:0,302:0}“,“inventoryCount”:”{1:25062,113:2,2:10000,211:2,101:11034,118:9,137:40,301:903914…

MySQL安装与配置教程

🌷🍁 博主猫头虎(🐅🐾)带您 Go to New World✨🍁 🦄 博客首页——🐅🐾猫头虎的博客🎐 🐳 《面试题大全专栏》 🦕 文章图文…

建筑工程模板包工包料价格

在建筑工程中,模板是承载混凝土浇筑的重要支撑结构,起到保持混凝土形状和支撑荷载的作用。对于建筑项目而言,了解建筑工程模板包工包料的价格范围是非常重要的。在本文中,我们将以混凝土粘模面积为基础,根据实际情况提…

String类讲解(1)

🐵本篇文章将讲解String类及其包含的方法 一、介绍String类 String属于引用类型,String类是Java的一个内置类,用于表示字符串,String类中具有许多方法,可以用来操作和处理字符串 二、字符串的构造 下面介绍三种构造字…

为品质加冕 | 喜尔康智家再次斩获大奖

近日,被誉为“家居质量界奥斯卡”的2023年度沸腾质量奖颁奖盛典在福建厦门第三届家居质量大会同期隆重举行。现场重磅揭晓2023年沸腾质量奖测评获奖结果。 今年,喜尔康智能家居再接再厉,从数百家参评企业中脱颖而出,参评的智能坐便…

Java中如何构建平衡二叉树

定义:平衡二叉树是一棵二叉排序树,或者为空,或者满足以下条件: 1)左右子树高度差的绝对值不大于1; 2)左右子树都是平衡二叉树。 平衡因子:左子树的高度减去右子树的高度,显然,在平衡…

卡码网语言基础课 | 15. 链表的基础操作Ⅲ

目录 一、 插入链表的过程 二、 删除链表的过程 三、 打印链表 3.1 判断节点是否处于链尾 3.2 打印链表 3.3 循环体结束,遍历打印 题目: 请编写一个程序,实现以下链表操作:构建一个单向链表,链表中包含一组整数…

python爱心代码高级

在Python中,我们可以使用matplotlib库来创建一个更高级的爱心图形。以下是一个示例: import matplotlib.pyplot as pltimport numpy as npx np.linspace(-2, 2, 1000)y1 np.sqrt(1-(abs(x)-1)**2)y2 -3*np.sqrt(1-(abs(x)/2)**0.5)fig, ax plt.subp…

uni-app 微信小程序 pdf预览

<div click"getPDF">查看体检报告</div>getPDF() {uni.downloadFile({url: ${this.$baseURL}/file/download?id${this.pdfFileId},//编写在线的pdf地址success: function(res) {const filePath res.tempFilePath;uni.openDocument({filePath: filePath…