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

news2024/11/26 2:35:59

多线程

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 {
        @Override
        public 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 {
            @Override
            public void lambda() {
                System.out.println("3: I like lambda");
            }
        }
        Like3 like3 = new Like3();
        like3.lambda();

        //5.匿名内部类:没有类的名称,必须借助接口或者父类
        like = new ILike() {
            @Override
            public 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 {
    @Override
    public 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.coloradmin.cn/o/1265034.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【LeetCode】128. 最长连续序列——哈希的应用(3)

文章目录 1、思路2、解题方法3、复杂度时间复杂度:空间复杂度: 4、Code Problem: 128. 最长连续序列 1、思路 我会用一种做题者的思路来去看待这道题。 我们在乍一看到这道题的时候,看到它的时间复杂度要求为O(N),然后又要求去找序列(就是让你判断这个…

高频Latex公式速查表,写论文技术博客不愁了

常见上下标X_{2}X^{2}\hat{X}\bar{X}\frac{1}{X}常见希腊字母\alpha \beta \gamma \delta \varepsilon \eta \theta \rho \sigma \phi \varphi \omega常见数学符号\leq \geq \neq\approx 其他\sum \prod \int \bigoplus \forall \exists \times \setminus \bigotimes \bigodot …

五分钟 k8s 实战-应用探针

Probe.png 今天进入 kubernetes 的运维部分(并不是运维 kubernetes,而是运维应用),其实日常我们大部分使用 kubernetes 的功能就是以往运维的工作,现在云原生将运维和研发关系变得更紧密了。 今天主要讲解 Probe 探针相…

集成IDE开发环境,Java开发工具IntelliJ IDEA 2023中文

IntelliJ IDEA 2023是一款功能强大的软件,其为程序员提供了一款先进的集成开发环境。它以智能、高效和人性化为主要特点,致力于提高开发人员的生产力,帮助程序员更快、更好地编写代码。IntelliJ IDEA 2023支持多种语言和框架,包括…

iOS 通用链接的配置(Universal Links)

一、打开Associated Domains 1.首先登录 苹果开发者网站 2.Certificates, Identifiers & Profiles 下的Identifiers 找到要配追的Identifiers 点进去 3.打开Associated Domains然后保存 二、更新Profile文件 如果我们使用自动的,可以忽略这一步,…

泛微E-Office SQL注入漏洞复现

0x01 产品简介 泛微E-Office是一款标准化的协同 OA 办公软件,泛微协同办公产品系列成员之一,实行通用化产品设计,充分贴合企业管理需求,本着简洁易用、高效智能的原则,为企业快速打造移动化、无纸化、数字化的办公平台。 0x02 漏…

00.本地搭建 threejs 文档网站(网页版是外网比较慢)

three官网 https://threejs.org/ 下载代码 进入官网 可以选择github去下载 或者 下载压缩包 github 下载https链接地址 https://github.com/mrdoob/three.js.git git clone https://github.com/mrdoob/three.js.git安装依赖启动程序 安装依赖 npm i 或者 pnpm i 或者 …

通过git上传文件到github仓库

一、新建github仓库 访问github官网:GitHub: Let’s build from here GitHub 点击个人头像,在右侧栏选择Your repositories。 点击New,新建一个github仓库。 创建Repository name仓库名,如果这个仓库名已经创建过的话&#xff…

开始使用Spring Boot Admin吧-使用Nacos注册SBA

什么是 Spring Boot Admin(SBA)? Spring Boot Admin 是 codecentric 公司开发的一款开源社区项目,目标是让用户更方便的管理以及监控 Spring Boot 应用。 应用可以通过我们的Spring Boot Admin客户端(通过HTTP的方式&#xff0…

Vue项目的创建、运行与端口号修改

前言:Vue-cli是Vue官方提供的一个脚手架,用于快速生成一个Vue的项目模板,依赖于NodeJS环境 NodeJS下载:NodeJS安装下载 Vue-cli下载:Vue-cli下载 一.Vue图形化创建项目 1.建立一个文件夹,保存Vue项目 2.在该…

华为P40无法链接adb的解决记录

真的很讨厌华为的设备,很多东西啥设备都能跑得好好的,就华为会出问题,简直就是手机界的IE。 情况:突然无法链接adb到P40,拔插无效,关闭开发人员选项再打开也无效,撤销USB调试授权也无效&#x…

xcode opencv

1、导入报错 Undefined symbols: linker command failed with exit code 1 (use -v to see invocation) 直接添加如下图内容即可

ArkTS-WebView内嵌H5页面

鸿蒙开发使用WebView内嵌H5页面 访问在线网页时需添加网络权限:ohos.permission.INTERNET module.json5文件配置 {"module" : {"requestPermissions":[{"name": "ohos.permission.INTERNET"}]} }踩坑日记 加载网页效果无法…

python-爬虫(可直接使用)

爬虫(Web Scraping)是指通过编程自动化地获取互联网上的信息的过程。爬虫的目的通常是从网页中抓取数据,进行数据分析、处理或展示。以下是爬虫的基本流程和一些重要的概念: 爬虫基本流程: 确定目标: 确定要…

React 之 airbnb - 项目实战

一、开发前言 1. 规范 2. 创建项目 node -v > 18.0.0 npm -v > 8.6.0 create-react-app star-airbnb 3. 项目基本配置 配置jsconfig.json {"compilerOptions": {"target": "es5","module": "esnext","ba…

如何设置带有密码的excel只读模式?

Excel只读模式大家都不陌生,那大家知道带有密码的只读模式吗?今天给大家分享如何设置带有密码的只读模式。 打开excel文件,将文件进行【另存为】设置,然后停留在保存路径的界面中,我们点击下面的工具 – 常规选项 在常…

postgresql以及postgis安装

一、安装postgresql及postgis 1.下载postgresql https://www.enterprisedb.com/downloads/postgres-postgresql-downloads 我选择的版本为“postgresql-14.8-2-windows-x64.exe”。 2.以管理员模式运行安装程序 安装路径建议不要C盘,可能会由于权限问题导致目录…

【计算机毕业设计】nodejs+vue音乐播放器系统 微信小程序83g3s

本系统的设计与实现共包含12个表:分别是配置文件信息表,音乐列表评论表信息表,音乐论坛信息表,歌手介绍信息表,音乐资讯信息表,收藏表信息表,token表信息表,用户表信息表,音乐类型信…

Elasticsearch:向量搜索 (kNN) 实施指南 - API 版

作者:Jeff Vestal 本指南重点介绍通过 HTTP 或 Python 使用 Elasticsearch API 设置 Elasticsearch 以进行近似 k 最近邻 (kNN) 搜索。 对于主要使用 Kibana 或希望通过 UI 进行测试的用户,请访问使用 Elastic 爬虫的语义搜索入门指南。你也可以参考文章…

最新AIGC创作系统ChatGPT系统源码+DALL-E3文生图+图片上传对话识图/支持OpenAI-GPT全模型+国内AI全模型

一、AI创作系统 SparkAi创作系统是基于ChatGPT进行开发的Ai智能问答系统和Midjourney绘画系统,支持OpenAI-GPT全模型国内AI全模型。本期针对源码系统整体测试下来非常完美,可以说SparkAi是目前国内一款的ChatGPT对接OpenAI软件系统。那么如何搭建部署AI…