Java Lambda表达式入门示例
作者:cakincqm 发布时间:2022-03-19 00:15:47
本文实例讲述了Java Lambda表达式。分享给大家供大家参考,具体如下:
一 点睛
Lambda表达式支持将代码块作为方法参数,Lambda表达式允许使用更简洁的代码来创建只有一个抽象方法的接口(函数式接口)的实例。
Lambda表达式主要作用就是代替匿名内部类的繁琐语法。
它由三部分组成:
形参列表。形参列表允许省略形参类型。如果形参列表中只有一个参数,甚至连形参列表的圆括号也可以省略。
箭头(->),必须通过英文等号和大于符号组成。
代码块。如果代码块只有包含一条语句,Lambda表达式允许省略代码块的花括号,如果省略了代码块的花括号,这条语句不要用花括号表示语句结束。Lambda代码块只有一条return语句,甚至可以省略return关键字。Lambda表达式需要返回值,而它的代码块中仅有一条省略了return的语句,Lambda表达式会自动返回这条语句的值。
二 用匿名内部类实现命令模式
1 代码
Command接口
public interface Command
{
// 接口里定义的process()方法用于封装“处理行为”
void process(int[] target);
}
ProcessArray类
public class ProcessArray {
public ProcessArray() {
}
public void process(int[] target, Command cmd) {
cmd.process(target);
}
}
CommandTest类
public class CommandTest {
public CommandTest() {
}
public static void main(String[] args) {
ProcessArray pa = new ProcessArray();
int[] array = new int[]{3, -4, 6, 4};
pa.process(array, new Command() {
public void process(int[] target) {
int sum = 0;
int[] var3 = target;
int var4 = target.length;
for(int var5 = 0; var5 < var4; ++var5) {
int tmp = var3[var5];
sum += tmp;
}
System.out.println("数组元素的总和是:" + sum);
}
});
}
}
2 运行
数组元素的总和是:9
三 用Lambda表达式实现命令模式
1 代码
public class CommandTest2
{
public static void main(String[] args)
{
ProcessArray pa = new ProcessArray();
int[] array = {3, -4, 6, 4};
// 处理数组,具体处理行为取决于匿名内部类
pa.process(array , (int[] target)->{
int sum = 0;
for (int tmp : target )
{
sum += tmp;
}
System.out.println("数组元素的总和是:" + sum);
});
}
}
2 运行
数组元素的总和是:9
四 比较
Lambda表达式与匿名内部类比较,不需要new XXX(){}这种繁琐的代码,不需要指出重写方法名字,不需要给出重写方法的返回值类型,只要给出重写的方法括号以及括号里的形参列表即可。
Lambda表达式的代码块会代替实现方法的方法体,Lambda表达式就相对于一个匿名方法。
五 Lambda表达式的简化写法
1 代码
interface Eatable
{
void taste();
}
interface Flyable
{
void fly(String weather);
}
interface Addable
{
int add(int a , int b);
}
public class LambdaQs
{
// 调用该方法需要Eatable对象
public void eat(Eatable e)
{
System.out.println(e);
e.taste();
}
// 调用该方法需要Flyable对象
public void drive(Flyable f)
{
System.out.println("我正在驾驶:" + f);
f.fly("【碧空如洗的晴日】");
}
// 调用该方法需要Addable对象
public void test(Addable add)
{
System.out.println("5与3的和为:" + add.add(5, 3));
}
public static void main(String[] args)
{
LambdaQs lq = new LambdaQs();
// Lambda表达式的代码块只有一条语句,可以省略花括号。
lq.eat(()-> System.out.println("苹果的味道不错!"));
// Lambda表达式的形参列表只有一个形参,省略圆括号
lq.drive(weather ->
{
System.out.println("今天天气是:" + weather);
System.out.println("直升机飞行平稳");
});
// Lambda表达式的代码块只有一条语句,省略花括号
// 代码块中只有一条语句,即使该表达式需要返回值,也可以省略return关键字。
lq.test((a , b)->a + b);
}
}
2 运行
LambdaQs$$Lambda$1/1078694789@3d075dc0
苹果的味道不错!
我正在驾驶:LambdaQs$$Lambda$2/1149319664@7cca494b
今天天气是:【碧空如洗的晴日】
直升机飞行平稳
5与3的和为:8
更多java相关内容感兴趣的读者可查看本站专题:《Java面向对象程序设计入门与进阶教程》、《Java数据结构与算法教程》、《Java操作DOM节点技巧总结》、《Java文件与目录操作技巧汇总》和《Java缓存操作技巧汇总》
希望本文所述对大家java程序设计有所帮助。
来源:https://blog.csdn.net/chengqiuming/article/details/91353417


猜你喜欢
- 如何通过Java发送HTTP请求,通俗点讲,如何通过Java(模拟浏览器)发送HTTP请求。Java有原生的API可用于发送HTTP请求,即
- 这是 Java 网络爬虫系列博文的第二篇,在上一篇 Java 网络爬虫新手入门详解 中,我们简单的学习了一下如何利用 Java 进行网络爬虫
- Spring自动装配之方法、构造器位置的自动注入1. 注解定义@Autowired的定义信息如下:@Target({ElementType.
- 一、导入相关jar包,pom依赖如下: <dependency> <groupId>org
- 有时候在单机部署,或者项目没有在IDea 开发工具中运行(idea可以自动打开tomcat项目),需要项目启动后自动打开浏览器访问项目,配置
- 问题描述如果直接获取某个json数组中的元素将得到如下的json{ "44": { "height
- 一个图片识别小工具,原先主要是识别以前公司的软件注册码截图里的数字和字母(每次要一个一个框复制出来粘贴到注册器里,很麻烦!),因为注册码出现
- 前言扫雷是一个常见小游戏,那么如何用C语言实现扫雷呢?学习了二维数组之后,我们可将扫雷的网格区域存储为二维数组,从而使用C语言实现扫雷。1.
- 本文实例为大家分享了winform实现五子棋游戏的具体代码,供大家参考,具体内容如下利用数组,根据新旧数组值的不同,获取那个点是什么棋子;说
- 目录一、Shiro简介 核心角色核心理念二、整合SpringBoot2框架 1、核心依赖2、Shiro核心配置3、域对象
- 前言JAVA缓存实现方案有很多,最基本的自己使用Map去构建缓存,或者使用memcached或Redis,但是上述两种缓存框架都要搭建服务器
- 需要用到的知识:注解、AOP、ExpiringMap(带有有效期的映射)我们可以自定义注解,把注解添加到我们的接口上。定义一个切面,执行方法
- AndroidStudio打包jar最近更新androidstudio之后发现打包jar不可用了。先看下以前的方法更新后新的用法//Copy
- 概述1、ThreadPoolExecutor作为java.util.concurrent包对外提供基础实现,以内部线程池的形式对外提供管理任
- 一、题目描述题目实现:一个服务器与多个客户端通信。通过一个服务器与多个客户端进行通信,运行程序,服务器启动后,启动两个客户端程序,然后通过服
- 本文实例为大家分享了flutter实现底部导航栏的具体代码,供大家参考,具体内容如下一.flutter底部导航栏常用组件BottomNavi
- 有关临时对象的生命周期有三种情况:1)一般情况:临时性对象的被摧毁,应该是对完整表达式(full-expression)求值过程中的最后一个
- 把idea中的项目导入github仓库中步骤详解做完项目进行云端保存是很必要的,我都是存放在github中。所以废活少说直接开始啦。前提是已
- 为什么我们需要IntentService ?Android中的IntentService是继承自Service类的,在我们讨论IntentS
- 在进行C#程序设计时,用的最多的莫过于string了,但有些时候由于不仔细或者基础的不牢固等因素容易出错,今天本文就来较为详细的总结一下C#