【响应式编程-01】Lambda表达式初体验

news2024/12/24 9:40:34

一、简要描述

  • Lambda初体验
  • Lambda表达式的语法格式
  • Lambda表达式应用举例
  • Lambda表达式底层实现

二、什么是Lambda表达式

Java8新特性,来源于数学中的λ[læ:mdə]演算

是一套关于函数(f(x))定义、输入量、输出量的计算方案

  • Lambda表达式 -> 函数
    • 使代码变得简洁、紧凑
    • 函数式编程:
      • 函数是“第一等公民”
      • 可以作为(其他函数的)返回值
      • 可以作为(其他函数的)参数进行传递
      • 可以赋值给变量

三、代码实现

1、定义User类

package tech.flygo.lambda.demo1;

/**
 * @description: 用户类
 * @author: flygo
 * @time: 2023/5/7 22:59
 */
public class User {

  private String name;

  private int age;

  public User() {}

  public User(String name, int age) {
    this.name = name;
    this.age = age;
  }

  public String getName() {
    return name;
  }

  public void setName(String name) {
    this.name = name;
  }

  public int getAge() {
    return age;
  }

  public void setAge(int age) {
    this.age = age;
  }

  @Override
  public String toString() {
    return "User{" + "name='" + name + '\'' + ", age=" + age + '}';
  }
}

2、定义Factory接口

package tech.flygo.lambda.demo1;

/**
 * @description: 工程接口
 * @author: flygo
 * @time: 2023/5/7 22:58
 */
public interface Factory {
  Object getObject();
}

3、定义Factory接口实现类SubClass

package tech.flygo.lambda.demo1;

/**
 * @description: 接口实现类
 * @author: flygo
 * @time: 2023/5/7 22:59
 */
public class SubClass implements Factory {

  @Override
  public Object getObject() {
    return new User();
  }
}

4、定义LambdaTest测试类

package tech.flygo.lambda.demo1;

/**
 * @description: Lambda测试类
 * @author: flygo
 * @time: 2023/5/7 23:01
 */
public class LambdaTest {

  public static void main(String[] args) {
    // 1、子类实现接口
    Factory factory = new SubClass(); // 多态
    User user1 = (User) factory.getObject();
    System.out.println(user1);

    // 2、匿名内部类
    factory =
        new Factory() {
          @Override
          public Object getObject() {
            return new User("张三", 18);
          }
        };

    User user2 = (User) factory.getObject();
    System.out.println(user2);

    // 3、Lambda表达式
    factory =
        () -> {
          return new User("李四", 20);
        };
    User user3 = (User) factory.getObject();
    System.out.println(user3);

    // 4、Lambda作为参数进行传递
    User user4 =
        getUserFromFactory(
            () -> {
              return new User("王五", 22);
            },
            User.class.getSimpleName());
    System.out.println(user4);

    // 5、Lambda作为函数返回值
    factory = getFactory();
    System.out.println(factory.getObject());
  }

  public static User getUserFromFactory(Factory factory, String beanName) {
    Object object = factory.getObject();
    if (object != null && object.getClass().getSimpleName().equals(beanName)) {
      return (User) object;
    }
    return null;
  }

  public static Factory getFactory() {
    return () -> {
      return new User("赵六", 24);
    };
  }
}

5、核心代码块

5.1、核心代码块-Lambda表达式

// 3、Lambda表达式
factory =
    () -> {
        return new User("李四", 20);
    };
User user3 = (User) factory.getObject();
System.out.println(user3);

5.2、核心代码块-Lambda作为参数进行传递

// 4、Lambda作为参数进行传递
User user4 =
    getUserFromFactory(
        () -> {
            return new User("王五", 22);
        },
        User.class.getSimpleName());
System.out.println(user4);

......

public static User getUserFromFactory(Factory factory, String beanName) {
    Object object = factory.getObject();
    if (object != null && object.getClass().getSimpleName().equals(beanName)) {
        return (User) object;
    }
    return null;
}

5.3、核心代码块-Lambda作为函数返回值

// 5、Lambda作为函数返回值
factory = getFactory();
System.out.println(factory.getObject());

......

public static Factory getFactory() {
    return () -> {
        return new User("赵六", 24);
    };
}

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

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

相关文章

智慧园区物联综合管理平台之架构简述

总体架构 系统总体划分为物联感知系统层、 核心平台层、 综合运营服务平台和展示层四部分。 物联感知系统层 物联感知系统主要是支撑园区智能化运行的各子系统, 包括门禁系统、 视频监控系统、 车辆管理系统等。 核心平台层 核心平台层包括: 园区物联综合管理平台和园区…

6.4 通过IO实现文件的读取与写入

6.4 通过IO实现文件的读取与写入 1. File类及常用方法2. 通过字节字符流实现文件读取与写入1. 流2. 字节输入流 InputStream 3.2. 1. File类及常用方法 package com.imooc.io;import java.io.File; import java.io.IOException;public class FileSample {public static void ma…

Premiere分屏特效图文内容幻灯片展示视频素材PR模板下载

Premiere Pro 模板,多屏幕内容展示PR幻灯片模板,分屏特效图文视频素材pr模板下载。 这是一个高质量、组织良好且易于自定义的视频剪辑模板。只需替换图像或视频,编辑文本,添加音频,微微调整即可! 来自PR模板…

Java经典框架之SpringBoot

SpringBoot Java 是第一大编程语言和开发平台。它有助于企业降低成本、缩短开发周期、推动创新以及改善应用服务。如今全球有数百万开发人员运行着超过 51 亿个 Java 虚拟机,Java 仍是企业和开发人员的首选开发平台。 课程内容的介绍 1. SpringBoot基础 2. Spring…

GraalVM Native学习及使用

概述 在开发Spring Boot 应用或者其他JAVA程序的过程中,启动慢、内存占用大是比较头疼的问题,往往需要更多的资源去部署,成本大幅提高。为了优化上述问题,常常使用优化程序、使用更小消耗的JVM、使用容器等措施。 现在有一个叫做…

权限修饰符和代码块

权限修饰符:是用来控制一个成员能够被访问的范围的。、 可以修饰成员变量、方法、构造方法、内部类。 权限修饰符的范围 权限修饰符的使用规则: 实际开发中,一般只用private和public 成员变量私有 方法公开 特例:如果方法中的…

Debezium日常分享系列之:向 Debezium 连接器发送信号

Debezium日常分享系列之:向 Debezium 连接器发送信号 一、概述二、激活源信号通道三、信令数据集合的结构四、创建信令数据集合五、激活kafka信号通道六、数据格式七、激活JMX信号通道八、自定义信令通道九、Debezium 核心模块依赖项十、部署自定义信令通道十一、信…

前端文件上传组件最全封装+删除+下载+预览

前言&#xff1a;使用的是若依的框架element uivue2封装的。如果有不对的地方欢迎指出。后台管理使用&#xff0c;文件需要上传。回显列表&#xff0c;详情也需要回显预览 // 开始封装组件&#xff1a;封装在 src/components/FileUpload/index.vue中 <template><div c…

诺派克ROPEX热封控制器维修RES-408/400VAC

德国希尔科诺派克ROPEX热封控制器维修型号包括&#xff1a;RES-401&#xff0c;RES-402&#xff0c;RES-403&#xff0c;RES-406&#xff0c;RES-407&#xff0c;RES-408&#xff0c;RES-409&#xff0c;RES-420&#xff0c;RES-440&#xff0c;MSW-2&#xff0c;PEX-W3&#x…

三层架构概述

三层架构就是把整个软件的代码分为三个层次&#xff0c;分层的目的是&#xff1a;规范代码&#xff0c;大型软件需要团队配合的时候问题就来了&#xff0c;由于每个程序员风格不一样&#xff0c;而开发软件大量的代码风格不统一就会造成后期调试和维护出现问题&#xff0c;然而…

Axure骚操作:【制作可暂停与不可暂停进度加载条】

目录 一、不可暂停进度条 1.1 前期准备 1.2 效果假想 1.3 适用场景 1.4 实现步骤 &#xff08;1&#xff09;除按钮外的元件设置隐藏 &#xff08;2&#xff09;给按钮添加交互 &#xff08;3&#xff09;给变量值文本标签添加交互 &#xff08;4&#xff09;给进度条矩…

计算机网络——传输层(五)

前言&#xff1a; 最重要的网络层我们已经学习完了&#xff0c;下面让我们再往上一层&#xff0c;对网络层的上一层传输层进行一个学习与了解&#xff0c;学习网络层的基本概念和网络层中的TCP协议和UDP协议 目录 ​编辑一、传输层的概述&#xff1a; 1.传输层&#xff1a; …

二叉树的前序遍历 、二叉树的最大深度、平衡二叉树、二叉树遍历【LeetCode刷题日志】

目录 一、二叉树的前序遍历 方法一&#xff1a;全局变量记录节点个数 方法二&#xff1a;传址调用记录节点个数 二、二叉树的最大深度 三、平衡二叉树 四、二叉树遍历 一、二叉树的前序遍历 方法一&#xff1a;全局变量记录节点个数 计算树的节点数: 函数TreeSize用于…

LLM之RAG理论(四)| RAG高级数据索引技术

本文将重新审视分块技术以及其他方法&#xff0c;包括查询增强、层次结构和知识图谱。 一、简单RAG架构快速概览 在2023年年初&#xff0c;我的主要关注点集中在Vector DB及其在更广泛的设计领域中的表现上。然而&#xff0c;随着2023年的收尾&#xff0c;这一领域出现了重大进…

Spring MVC - Controller的创建与使用

控制器Controller是处理器&#xff0c;是真正处理请求的组件 1 创建Controller 一般在src/main/java/com/qdu下建立一个controller包用来存放所有控制器。当创建一个控制器时&#xff0c;首先要记得使用Controller标记将该类注册成为一个控制器类。 然后在SpringMVCConfig类…

项目 杂碎 知识点 汇总!!!

Vue !!! setup生命周期 使用 nextTick &#xff01;&#xff01;获取节点 onMounted中可以使用JS&#xff0c;获取节点&#xff0c;setup生命周期无法获取节点 vue实现文本粘贴复制 Vue遍历对象 1、使用v-for指令&#xff1a;可以直接遍历对象的键和值 2、使用 Object.keys…

git基础概念和常用命令(日常开发收藏备用)

目录 ### 常用命令 ### 远程仓库与克隆 ### 分支管理 ### 子模块&#xff08;Submodule&#xff09; ### 其他高级操作 ### 交互式暂存&#xff08;Interactive Staging&#xff09; ### cherry-pick ### rebase ### reflog与reset ### 子树合并&#xff08;Subtree …

【Maven】<scope>provided</scope>

在Maven中&#xff0c;“provided”是一个常用的依赖范围&#xff0c;它表示某个依赖项在编译和测试阶段是必需的&#xff0c;但在运行时则由外部环境提供&#xff0c;不需要包含在最终的项目包中。下面是对Maven scope “provided”的详细解释&#xff1a; 编译和测试阶段可用…

Vue3全局属性app.config.globalProperties

文章目录 一、概念二、实践2.1、定义2.2、使用 三、最后 一、概念 一个用于注册能够被应用内所有组件实例访问到的全局属性的对象。点击【前往】访问官网 二、实践 2.1、定义 在main.ts文件中设置app.config.globalPropertie import {createApp} from vue import ElementPl…

.NET国产化改造探索(二)、银河麒麟安装人大金仓数据库

随着时代的发展以及近年来信创工作和…废话就不多说了&#xff0c;这个系列就是为.NET遇到国产化需求的一个闭坑系列。接下来&#xff0c;看操作。 上一篇介绍了如何安装银河麒麟操作系统&#xff0c;这篇文章详细介绍下如何在银河麒麟操作系统上安装人大金仓数据库。 准备安…