Lambda表达式浅要分析

本文深入探讨Java中的Lambda表达式,阐述其简化复杂匿名内部类、提升代码可读性的优势。通过实例解析Lambda的使用方法,包括标准格式、参数省略与精简。此外,还介绍了Lambda的延迟加载机制,展示如何通过Lambda避免不必要的计算,提高程序效率。
摘要由CSDN通过智能技术生成

Lambda表达式的优势

  • Lambda表达式的优势主要在于可将复杂的函数式接口相对复杂的匿名内部类代码简化,且更为直观

函数式接口:只有一个抽象方法的接口
匿名内部类:类似new Random().nextInt(999); 能够高效地使用某类中得某一个方法

使用条件

  • 函数式接口的调用

使用方法

  • (参数列表) -> {代码块}

使用例子

//给定一个厨子 Cook 接口,内含唯一的抽象方法 makeFood ,且无参数、无返回值。如下:
public interface Cook { void makeFood(); }

//在下面的代码中,请使用Lambda的标准格式调用 invokeCook 方法,打印输出“吃饭啦!”字样:
public class Demo05InvokeCook { 
	public static void main(String[] args) { 
		// TODO 请在此使用Lambda【标准格式】调用invokeCook方法 
}
	==这里是方法的定义,是invokeCook方法如何利用cook类对象方法的动作==
	private static void invokeCook(Cook cook) { cook.makeFood(); } 
}
  • 注意:Lambda表达式是在调用方法时使用
//上方该插入的内容
==这里是方法参数cook类的写入,是cook方法的动作==
public static void main(String[] args) { 
    invokeCook(()> { System.out.println("吃饭啦!");});
}

Lambda的继续精简省略

1.可省略(参数列表)参数列表中参数的类型声明符号
2.当无参数时不能省略()
3.当只有一个参数时,可省略()
4.当{代码块}代码块中只有一行代码时,要么同时省略大括号、return、分号,要么一个都不要省略

例子

 public static void main(String[] args) { 
	 invokeCook(()> { System.out.println("吃饭啦!");});
 }
 //精简后
 public static void main(String[] args){
 	invokeCook(()-> System.out.println("吃饭了!"));//省略了大括号,return(这里原本就没有)和分号
 }

可以这样理解:
()->System.out.println("吃饭了!")) 作用上等同于invokeCook函数体中的cook.makeFood();
new cook(){ @Override public void makeFood(){...}}内容上等同于()->{...}

Lambda的延迟加载机制

对比(未使用延迟加载)

==函数定义==
public void showMessage(int level, String message){
	if(level == 1) System.out.println(message);
	}
	
==函数调用==	
String a = "123";
String b = "234";
showMessage(1,a+b);   -当level是1时,先运行a+b后运行showMessage()-
showMessage(0,a+b);   -当level是0时,虽然不能打印出任何信息但是还是会先a+b后运行showMessage() 进行判断,所以这样导致了资源的浪费-

对比(使用Lambda进行延时加载)

==函数定义==
public void showMessage(int level, Info message){
	if(level==1) System.out.println(message.showMessage());
	}
==函数式接口定义==
interface Info{
	public abstract String showMessage(); //接口有且仅有一个抽象方法,里面的内容等待Lambda表达式进行定义
}
==Lambda写法调用==
String a = "123";
String b = "234";
showMessage(1,()->{return a+b;}); //化简 showMessage(1,()->a+b);
showMessage(0,()->a+b);  -(延迟体现)这时就会先判断是否是1,如果不是就不会运行a+b;-

注解:这里也比较好理解,lambda实质上在这里还是匿名内部的简化形式,看函数定义的代码,如果level不等于1的话就不会运行message.showMessage(),也就不会计算a+b

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

子陌.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值