Lambda 表达式各种用法,你都会了吗
公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。
前言
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 表达式各种用法,你都会了吗的更多相关文章
- python lambda表达式简单用法【转】
python lambda表达式简单用法 1.lambda是什么? 看个例子: g = lambda x:x+1 看一下执行的结果: g(1) >>>2 g(2) >>& ...
- C++11 中function和bind以及lambda 表达式的用法
关于std::function 的用法: 其实就可以理解成函数指针 1. 保存自由函数 void printA(int a) { cout<<a<<endl; } std:: ...
- Lambda 表达式递归用法实例
注意: 使用Lambda表达式会增加额外开销,但却有时候又蛮方便的. Windows下查找子孙窗口实例: HWND FindDescendantWindows(HWND hWndParent, LPC ...
- python lambda表达式简单用法
习条件运算时,对于简单的 if else 语句,可以使用三元运算来表示,即: 1 2 3 4 5 6 7 8 # 普通条件语句 if 1 == 1: name = 'wupeiqi' else ...
- 快速掌握Java中Lambda表达式的用法
Lambda表达式的作用: Lambda表达式的作用就是简化代码开发,让代码看起来更加简介.它是用来简化匿名内部类的.但是并不是所有的匿名内部类都能用Lambda表达式简化,Lambda表达式是有使用 ...
- C++ Lambda表达式基本用法(言简意赅,非常清楚)
创建一个匿名函数并执行.Objective-C采用的是上尖号^,而C++ 11采用的是配对的方括号[].实例如下: 1 2 3 4 5 6 7 8 9 #include <iostream> ...
- Lambda表达式的用法
参考:https://www.cnblogs.com/knowledgesea/p/3163725.html
- c++中lambda表达式的用法
#include <iostream> using namespace std; int main(){ ; auto func1 = [=](;}; auto func2 = [& ...
- java8+ Lambda表达式基本用法
LIST public class LambdaTest { @Getter @Setter @AllArgsConstructor static class Student{ private Lon ...
- C# LINQ查询表达式用法对应Lambda表达式
C#编程语言非常优美,我个人还是非常赞同的.特别是在学习一段时间C#后发现确实在它的语法和美观度来说确实要比其它编程语言强一些(也可能是由于VS编译器的加持)用起来非常舒服,而且对于C#我觉得他最优美 ...
随机推荐
- 「保姆级」网络爬虫教程(二):教你下载文库中的PDF文档!
如何点赞再看,养成习惯.微信公众号搜索「Job Yan」关注这个爱发技术干货的 Coder.本文 GitHub https://github.com/JobYan/PythonPearls 已收录,还 ...
- 如何保证Spring Boot接口安全的呢?
在保证Spring Boot接口安全时,我们需要关注的主要方面包括:认证(Authentication).授权(Authorization).数据安全性(Data Security).以及防止常见的W ...
- phpmyadmin修改上传限制,phpmyadmin修改上传文件大小限制,docker版本phpmyadmin
我用的是DOCKER 版本的phpmyadmin 修改/usr/local/etc/php/conf.d/phpmyadmin-misc.ini 内的限制变量文件为 100M,重启docker 容器后 ...
- k8s安装Dashboard出现了 pod 状态为CrashLoopBackOff
1.问题现象 2.解决办法 (1) 先看一下pods日志信息 kubectl logs -f -n kubernetes-dashboard kubernetes-dashboard-658485d5 ...
- ElasticSearch Groovy 沙盒绕过 && 代码执行漏洞
漏洞编号:CVE-2015-1427 漏洞详情 CVE编号 CVE-2015-1427 漏洞级别 高危7.5 标题 Elasticsearch Groovy 脚本引擎存在远程代码执行漏洞 披露时间 2 ...
- Scrapy-settings.py常规配置
# Scrapy settings for scrapy_demo project # # For simplicity, this file contains only settings consi ...
- 文心一言 VS 讯飞星火 VS chatgpt (164)-- 算法导论13.1 4题
四.用go语言,假设将一棵红黑树的每一个红结点"吸收"到它的黑色父结点中,使得红结点的子结点变成黑色父结点的子结点(忽略关键字的变化).当一个黑结点的所有红色子结点都被吸收后,它可 ...
- 企业u盘禁止访问如何解锁
如果您遇到了U盘禁止访问的问题,可能是由于系统设置.安全策略或第三方工具导致的.以下是一些可能的解锁方法,具体的操作可能因具体情况而异: 管理员权限: 确保您有足够的管理员权限来解锁U盘.有时,系统管 ...
- Javascript面向对象的程序设计 —— 创建自定义类型的7种方法
Object构造函数或对象字面量都可以用来创建单个对象,但是使用这些方式用同一个接口创建很多对象,会产生大量的重复代码.为了解决这个问题,工厂模式的一种变体开始被使用.1.工厂模式工厂模式抽象了创建具 ...
- vulntarget-a-wp
vulntarget-a 信息收集 存活扫描,目标开放了445还是win7,考虑一手永恒之蓝 arp-scan -l nmap -A -sT -sV 192.168.130.4 永恒之蓝 用nmap的 ...