公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。

前言

Lambda表达式是 Java 8 中引入的最有影响力的功能之一。它们通过允许简洁而优雅地创建匿名函数来实现 Java 中的函数式编程。在这篇博文中,我们将探讨编写 lambda 表达式的各种形式。

概述

lambda 表达式是可以具有参数和主体的匿名函数。

正文可以包含零行、一行或多行代码,Lambda 表达式可以分配给类型为函数式接口(具有单个抽象方法的接口)的变量。

Lambda 表达式的各种编写形式

Java 中的Lambda 表达式 可以以各种形式编写,具体取决于它们所实现的函数式接口的抽象方法的签名。

以下是编写 lambda 表达式的一些不同方法:

1.无参数,无返回值:

如果抽象方法不带参数且不返回值,则 可以使用空括号和主体编写lambda 表达式:

() -> System.out.println("Hello, World!");

2. 单参数,无类型声明:

如果抽象方法采用单个参数,则可以省略参数周围的括号,并且可以推断类型:

s -> System.out.println(s);

3. 单参数,带类型声明:

(String s) -> System.out.println(s);

4. 多个参数:

如果抽象方法采用多个参数,则必须在参数两边加上括号。类型可以推断或显式声明:

(a, b) -> a + b;
(int a, int b) -> a + b;

5、有参数并且有返回值声明

如果 lambda 的主体由单个返回值的表达式组成,则可以直接编写:

(int a, int b) -> a + b;

如果主体由多个语句组成,则必须包含大括号并使用 return 语句:

(int a, int b) -> {
int sum = a + b;
return sum;
};

6.无参数,返回值:

如果抽象方法不带参数但有返回值,可以这样写:

() -> 42;

示例:各种形式的 Lambda 表达式

这是一个简单的 Java 程序,演示了各种形式的 Lambda 表达式

package com.example.spring.demo;

public class LambdaExample {

    public static void main(String[] args) {
//无参数,无返回值:
Runnable noParametersNoReturnValue = () -> System.out.println("Hello, World!");
noParametersNoReturnValue.run(); // 输出: Hello, World! //单参数,无类型声明:
java.util.function.Consumer<String> singleParameterNoType = s -> System.out.println(s);
singleParameterNoType.accept("Single Parameter, No Type!"); // 输出: Single Parameter, No Type!
//单参数,带类型声明:
java.util.function.Consumer<String> singleParameterWithType = (String s) -> System.out.println(s);
singleParameterWithType.accept("Single Parameter with Type!"); // 输出: Single Parameter with Type! //多个参数,无类型声明
java.util.function.BiFunction<Integer, Integer, Integer> multipleParametersTypeInferred = (a, b) -> a + b;
System.out.println(multipleParametersTypeInferred.apply(5, 10)); // 输出: 15 //多个参数,有类型声明
java.util.function.BiFunction<Integer, Integer, Integer> multipleParametersWithType = (Integer a, Integer b) -> a + b;
System.out.println(multipleParametersWithType.apply(5, 10)); // 输出: 15 // 多个参数,并且多行实现
java.util.function.BiFunction<Integer, Integer, Integer> multipleStatements = (a, b) -> {
int sum = a + b;
return sum;
};
System.out.println(multipleStatements.apply(5, 10)); // 输出: 15 // 无参数,但是有返回值
java.util.function.Supplier<Integer> noParametersReturnValue = () -> 42;
System.out.println(noParametersReturnValue.get()); // 输出: 42
}
}

输出

Hello, World!
Single Parameter, No Type!
Single Parameter with Type!
15
15
15
42

结论

lambda表达式的形式,具体取决于参数的数量和类型、是否包含显式类型声明以及主体是由单个表达式还是多个语句组成,Java 中Lambda 表达式的灵活性,使我们能够编写简洁且富有表现力的代码。

Lambda 表达式各种用法,你都会了吗的更多相关文章

  1. python lambda表达式简单用法【转】

    python lambda表达式简单用法 1.lambda是什么? 看个例子: g = lambda x:x+1 看一下执行的结果: g(1) >>>2 g(2) >>& ...

  2. C++11 中function和bind以及lambda 表达式的用法

    关于std::function 的用法:  其实就可以理解成函数指针 1. 保存自由函数 void printA(int a) { cout<<a<<endl; } std:: ...

  3. Lambda 表达式递归用法实例

    注意: 使用Lambda表达式会增加额外开销,但却有时候又蛮方便的. Windows下查找子孙窗口实例: HWND FindDescendantWindows(HWND hWndParent, LPC ...

  4. python lambda表达式简单用法

    习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 1 2 3 4 5 6 7 8 # 普通条件语句 if 1 == 1:     name = 'wupeiqi' else ...

  5. 快速掌握Java中Lambda表达式的用法

    Lambda表达式的作用: Lambda表达式的作用就是简化代码开发,让代码看起来更加简介.它是用来简化匿名内部类的.但是并不是所有的匿名内部类都能用Lambda表达式简化,Lambda表达式是有使用 ...

  6. C++ Lambda表达式基本用法(言简意赅,非常清楚)

    创建一个匿名函数并执行.Objective-C采用的是上尖号^,而C++ 11采用的是配对的方括号[].实例如下: 1 2 3 4 5 6 7 8 9 #include <iostream> ...

  7. Lambda表达式的用法

    参考:https://www.cnblogs.com/knowledgesea/p/3163725.html

  8. c++中lambda表达式的用法

    #include <iostream> using namespace std; int main(){ ; auto func1 = [=](;}; auto func2 = [& ...

  9. java8+ Lambda表达式基本用法

    LIST public class LambdaTest { @Getter @Setter @AllArgsConstructor static class Student{ private Lon ...

  10. C# LINQ查询表达式用法对应Lambda表达式

    C#编程语言非常优美,我个人还是非常赞同的.特别是在学习一段时间C#后发现确实在它的语法和美观度来说确实要比其它编程语言强一些(也可能是由于VS编译器的加持)用起来非常舒服,而且对于C#我觉得他最优美 ...

随机推荐

  1. c#利用反射获取枚举的信息

    1.将不同的枚举类型作为形参传入某函数内时,形参为Enum,在函数体内进行类型强转. private T GetEnumType<T>(object o) { T enumVal = (T ...

  2. GCD Inside: GCD 数据结构

    1 OS_object OS_object由下面宏OS_OBJECT_DEC_BASE扩展而来: // 1. os/object.h OS_OBJECT_DECL_BASE(object, NSObj ...

  3. Ubuntu 20.04 使用 vlmscd 搭建 KMS 服务端

    前言 为了内网系统激活需要,搭建此客户端. 1. 下载二进制文件 打开项目官网:https://github.com/Wind4/vlmcsd 下载项目二进制文件: 选择对应系统和架构 选择性能较好的 ...

  4. 等保测评之主机测评——Centos7

    目录 基础信息收集 (一)身份鉴别 (二)访问控制 (三)安全审计 (四)入侵防范 (五)恶意代码防范 (六)可信验证 (七)数据完整性 (八)数据保密性 (九)数据备份恢复 (十)剩余信息保护 命令 ...

  5. python判断素数

    def slowsnail(num): count = num // 2 while count > 1: if num % count == 0: print('%d最大的约数是%d' % ( ...

  6. 老是听到做PPT要会“内容可视化”,到底啥是内容可视化?

    在PPT中,内容可视化是指将文字.数据和概念等抽象信息转化为图像.图表.图表及其他可视化元素来呈现.通过合适的颜色.形状.大小和布局等视觉设计元素来强调信息的关键点和关系, 从而提高观众对信息的理解和 ...

  7. springCore完整学习教程2,入门级别

    上集说到:2. 3,咱们从2.3集开始 2. Externalized Configuration 2.3. External Application Properties Spring Boot会自 ...

  8. vue-test --------模板引用

    <template> <input type="text" v-model.lazy="message"> <div>{{m ...

  9. MybatisPlus的一些高级特性

    1.MybatisPlus多数据源配合 导入相关依赖 <dependency> <groupId>com.baomidou</groupId> <artifa ...

  10. IDEA插件(2 高效开发)

    一.高效开发代码插件 ① .TONGYI Lingma(阿里通灵代码AI插件) 提问回答 右键其他功能,只需要登录阿里账号就可以使用 ②.Talk X(AI提示插件,和阿里通灵代码很像的功能) ③.A ...